假设我在Git存储库中。我删除一个文件并提交更改。我继续工作,并做出更多承诺。然后,我发现删除该文件后需要恢复该文件。
我知道我可以使用gitcheckout<commit>--filename.txt签出文件,但我不知道该文件何时被删除。
如何查找删除给定文件名的提交?如何将该文件恢复到工作副本中?
假设我在Git存储库中。我删除一个文件并提交更改。我继续工作,并做出更多承诺。然后,我发现删除该文件后需要恢复该文件。
我知道我可以使用gitcheckout<commit>--filename.txt签出文件,但我不知道该文件何时被删除。
如何查找删除给定文件名的提交?如何将该文件恢复到工作副本中?
当前回答
如果尚未提交删除,下面的命令将在工作树中恢复已删除的文件。
$ git checkout -- <file>
您可以使用下面的命令获取工作树中所有已删除文件的列表。
$ git ls-files --deleted
如果已提交删除,请找到发生删除的位置,然后从此提交中恢复文件。
$ git rev-list -n 1 HEAD -- <file>
$ git checkout <commit>^ -- <file>
如果您正在查找要恢复的文件路径,以下命令将显示所有已删除文件的摘要。
$ git log --diff-filter=D --summary
其他回答
我有这个解决方案。
使用以下方法之一获取删除文件的提交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 log -- path/to/file
最后一次提交(最顶层)是删除文件的提交。因此,您需要恢复倒数第二次提交。
git checkout {second to last commit} -- path/to/file
获取已删除文件的所有提交以及已删除的文件:git-log--diff-filter=D--摘要记下所需的提交散列,例如e4e6d4d5e5c59c69f3bd7be2。将删除的文件从之前的一次提交(~1)还原到上面确定的提交(e4e6d4d5e5c59c69f3bd7be2):git签出e4e6d4d5e5c59c69f3bd7be2~1路径/to/file.ext注意~1。
要获得最佳方法,请尝试。
首先,找到删除文件的提交的提交id。它将为您提供已删除文件的提交摘要。
git-log--diff-filter=D--摘要git校验84sdhfddbdddf~1
注意:84sdhfddbddd是您的提交id
通过此操作,您可以轻松恢复所有已删除的文件。
我也有同样的问题。在不知情的情况下,我创建了一个悬空的承诺。
列出悬空提交
git fsck—找到丢失
检查每个悬空提交
git reset--hard<commit id>
当我移动到悬空提交时,我的文件再次出现。
git状态,原因如下:
“HEAD从<commit id where it detached>分离”