假设我在Git存储库中。我删除一个文件并提交更改。我继续工作,并做出更多承诺。然后,我发现删除该文件后需要恢复该文件。

我知道我可以使用gitcheckout<commit>--filename.txt签出文件,但我不知道该文件何时被删除。

如何查找删除给定文件名的提交?如何将该文件恢复到工作副本中?


当前回答

user@bsd:~/work/git$ rm slides.tex
user@bsd:~/work/git$ git pull 
Already up-to-date.
user@bsd:~/work/git$ ls slides.tex
ls: slides.tex: No such file or directory

还原删除的文件:

user@bsd:~/work/git$ git checkout
D       .slides.tex.swp
D       slides.tex
user@bsd:~/work/git$ git checkout slides.tex 
user@bsd:~/work/git$ ls slides.tex
slides.tex

其他回答

在许多情况下,将coreutils(grep、sed等)与Git结合使用可能很有用。我已经非常熟悉这些工具,但Git就不那么熟悉了。如果我想搜索已删除的文件,我会做以下操作:

git log --raw | grep -B 30 $'D\t.*deleted_file.c'

当我找到修订/提交时:

git checkout <rev>^ -- path/to/refound/deleted_file.c

就像其他人在我面前所说的那样。

文件现在将恢复到删除前的状态。如果你想保留它,记得将它重新提交到工作树中。

我有这个解决方案。

使用以下方法之一获取删除文件的提交id。git-log--grep=*word*git-log-剑git-log|grep--context=5*word*git-log--stat|grep--context=5*word*#建议您记住任何事情您应该得到以下内容:

提交bfe68bd117e1091c96d2976c99b3bcc8310bebe7作者:Alexander奥尔洛夫日期:2011年5月12日星期四23:44:27+0200替换了已弃用的GWT类-gwtI18nKeySync.sh,一个过时的(?,被Maven目标取代)I18n生成脚本提交3ea4e3af253ac6fd1691f6bb89c964f54802302作者:Alexander奥尔洛夫日期:2011年5月12日星期四22:10:22+0200

3.现在使用提交id bfe68bd117e1091c96d2976c99b3bcc8310bebe7执行以下操作:

git checkout bfe68bd117e1091c96d2976c99b3bcc8310bebe7^1 yourDeletedFile.java

由于提交id引用了文件已被删除的提交,您需要引用bfe68b之前的提交,可以通过添加^1来完成。这意味着:在bfe68b之前提交给我。

实际上,这个问题直接与Git有关,但像我这样的人除了了解Git CLI命令之外,还使用诸如WebStorm VCS之类的GUI工具。

我右键单击包含已删除文件的路径,然后转到Git,然后单击Show History。

VCS工具显示了所有的修订序列,我可以看到它们的所有提交和更改。

然后我选择我的朋友删除PostAd.js文件的提交。现在参见下文:

现在,我可以看到我希望删除的文件。我只需双击文件名,它就会恢复。

我知道我的答案不是Git命令,但对于初学者和专业开发人员来说,它是快速、可靠和容易的。WebStorm VCS工具非常棒,非常适合使用Git,而且不需要任何其他插件或工具。

简单而精确-

首先,获取一个最新的稳定提交,其中您可以通过-

git log 

假设您找到$commitid 1234567…,然后

git checkout <$commitid> $fileName

这将还原该提交中的文件版本。

要还原文件夹中的所有已删除文件,请执行以下操作:

git ls-files -d | xargs git checkout --