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

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

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


当前回答

git checkout /path/to/deleted.file

其他回答

如果尚未提交删除,下面的命令将在工作树中恢复已删除的文件。

$ git checkout -- <file>

您可以使用下面的命令获取工作树中所有已删除文件的列表。

$ git ls-files --deleted

如果已提交删除,请找到发生删除的位置,然后从此提交中恢复文件。

$ git rev-list -n 1 HEAD -- <file>
$ git checkout <commit>^ -- <file>

如果您正在查找要恢复的文件路径,以下命令将显示所有已删除文件的摘要。

$ git log --diff-filter=D --summary

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

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

git取消删除路径/to/file.ext

将其放入.bash_profile(或打开命令shell时加载的其他相关文件):git-config--全局别名取消删除'!sh-c“git checkout$(git rev list-n 1 HEAD--$1)^--$1”-'然后使用:git取消删除路径/to/file.ext

该别名首先检查以查找该文件存在的最后一次提交,然后在Git中签出该文件所在的最后一个提交的文件路径。来源

我有这个解决方案。

使用以下方法之一获取删除文件的提交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 checkout /path/to/deleted.file