无法在Git中恢复文件

时间:2009-03-11 16:32:05

标签: git rm

  

可能重复:
  Restore a deleted file in a Git repo

我的Git中有两个分支, master和newFeature 。 在分支 newFeature ,我首先在终端中物理删除了fileA,然后在Git中删除了

git rm fileA

随后,我运行

git add .
git commit

现在,我再次需要 fileA 。 我只想切换到分支 master ,我就知道我可以恢复它。 我显然错了,因为我找不到 fileA

如何使用Git返回文件?

3 个答案:

答案 0 :(得分:11)

首先,您需要找到最新版本fileA的位置。您可以使用“git log -p”或“git whatchanged”来检查它何时被删除,或者您可以使用“git ls-files< revision > - fileA”来检查文件存在于给定的提交中,其中'< revision >'可以是 master newFeature ^ newFeature ^ 表示 newFeature 的父级)。

然后你需要使用

检查出来
$ git checkout <revision> -- fileA

或重定向“git show”输出

$ git show <revision>:fileA > fileA

不要忘记将文件添加到git(如果需要)!

答案 1 :(得分:3)

在删除文件之前在提交时创建标记或分支,将其签出,将文件复制到其他位置,然后再次签出newFeature分支。其余的应该很简单。

答案 2 :(得分:1)

@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$