假设我在Git存储库中。我删除一个文件并提交更改。我继续工作,并做出更多承诺。然后,我发现删除该文件后需要恢复该文件。
我知道我可以使用gitcheckout<commit>--filename.txt签出文件,但我不知道该文件何时被删除。
如何查找删除给定文件名的提交?如何将该文件恢复到工作副本中?
假设我在Git存储库中。我删除一个文件并提交更改。我继续工作,并做出更多承诺。然后,我发现删除该文件后需要恢复该文件。
我知道我可以使用gitcheckout<commit>--filename.txt签出文件,但我不知道该文件何时被删除。
如何查找删除给定文件名的提交?如何将该文件恢复到工作副本中?
当前回答
我必须从一个特定的提交中恢复一堆已删除的文件,我用两个命令进行管理:
git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git checkout <rev>^ --
git show <rev> --diff-filter=D --summary --name-only --no-commit-id | xargs git reset HEAD
(注意每个命令末尾的尾随空格。)
这些文件已添加到.gitignore文件中,然后用gitrm清除。我需要恢复这些文件,但随后又将其拆下。我有数百个文件要恢复,像其他示例中那样手动为每个文件键入内容太慢了。
其他回答
我也有同样的问题。在不知情的情况下,我创建了一个悬空的承诺。
列出悬空提交
git fsck—找到丢失
检查每个悬空提交
git reset--hard<commit id>
当我移动到悬空提交时,我的文件再次出现。
git状态,原因如下:
“HEAD从<commit id where it detached>分离”
使用以下代码将以前的文件检索到本地目录时,我也遇到了这个问题:
git checkout <file path with name>
下面的例子对我很有用:
git checkout resources/views/usaSchools.blade.php
在许多情况下,将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
就像其他人在我面前所说的那样。
文件现在将恢复到删除前的状态。如果你想保留它,记得将它重新提交到工作树中。
实际上,这个问题直接与Git有关,但像我这样的人除了了解Git CLI命令之外,还使用诸如WebStorm VCS之类的GUI工具。
我右键单击包含已删除文件的路径,然后转到Git,然后单击Show History。
VCS工具显示了所有的修订序列,我可以看到它们的所有提交和更改。
然后我选择我的朋友删除PostAd.js文件的提交。现在参见下文:
现在,我可以看到我希望删除的文件。我只需双击文件名,它就会恢复。
我知道我的答案不是Git命令,但对于初学者和专业开发人员来说,它是快速、可靠和容易的。WebStorm VCS工具非常棒,非常适合使用Git,而且不需要任何其他插件或工具。
要还原已删除并提交的文件,请执行以下操作:
git reset HEAD some/path
git checkout -- some/path
它在Git 1.7.5.4版本上进行了测试。