关于rm:无法在git中恢复文件

Unable to recover a file in Git

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Restore a deleted file in a Git repo

我的Git中有两个分支,master和newfeature。在branch newfeature中,我先在终端物理删除了filea,然后在git中删除了。

1
git rm fileA

后来,我跑了

1
2
git add .
git commit

现在,我又需要一份菲拉。我有一个想法,只要切换到分支主机,我就可以把它取回来。显然我错了,因为我找不到鱼片。

我怎样才能用Git取回文件?


首先,您需要找到最新版本的fileA的位置。您可以使用"git log-p"或"git whatchanged"检查删除的时间,也可以使用"git ls files--filea"检查给定提交中是否存在文件,其中""可以是master或newfeature^(newfeature^表示newfeature的父级)。

然后你需要检查一下,或者用

1
$ git checkout <revision> -- fileA

或重定向"Git Show"输出

1
$ git show <revision>:fileA > fileA

别忘了添加文件到git(如果需要)!


在删除filea之前,在commit中创建一个标记或分支,签出它,将filea复制到其他地方,然后再次签出newFeature分支。剩下的应该很简单。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@titan:~$ cd /tmp/
@titan:/tmp$ mkdir x
@titan:/tmp$ git init
Initialized empty Git repository in /tmp/.git/
@titan:/tmp$ echo a > a
@titan:/tmp$ git add a
@titan:/tmp$ git ci -m a
Created initial commit c835beb: a
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 a
@titan:/tmp$ git rm a
rm 'a'
@titan:/tmp$ git ci -m b
Created commit de97fae: b
 1 files changed, 0 insertions(+), 1 deletions(-)
 delete mode 100644 a
@titan:/tmp$ git whatchanged
commit de97fae7a72375ffa192643836ec8273ff6f762b
Date:   Wed Mar 11 17:35:57 2009 +0100

    b

:100644 000000 7898192... 0000000... D  a

commit c835beb7c0401ec27d00621dcdafd366d2cfdcbe
Date:   Wed Mar 11 17:35:51 2009 +0100

    a

:000000 100644 0000000... 7898192... A  a
@titan:/tmp$ git show 7898192
a
@titan:/tmp$ git show 7898192 > a
@titan:/tmp$