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

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

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


当前回答

如果您知道文件名,这是使用基本命令的简单方法:

列出该文件的所有提交。

git log -- path/to/file

最后一次提交(最顶层)是删除文件的提交。因此,您需要恢复倒数第二次提交。

git checkout {second to last commit} -- path/to/file

其他回答

使用以下代码将以前的文件检索到本地目录时,我也遇到了这个问题:

git checkout <file path with name>

下面的例子对我很有用:

git checkout resources/views/usaSchools.blade.php

为了使用Git恢复所有删除的文件,您还可以执行以下操作:

git checkout $(git ls-files --deleted)

其中git-ls-files-deleted列出了所有删除的文件,gitcheckout$(git命令)在参数中恢复文件列表。

我也有同样的问题。在不知情的情况下,我创建了一个悬空的承诺。

列出悬空提交

git fsck—找到丢失

检查每个悬空提交

git reset--hard<commit id>

当我移动到悬空提交时,我的文件再次出现。

git状态,原因如下:

“HEAD从<commit id where it detached>分离”

要获得最佳方法,请尝试。


首先,找到删除文件的提交的提交id。它将为您提供已删除文件的提交摘要。

git-log--diff-filter=D--摘要git校验84sdhfddbdddf~1

注意:84sdhfddbddd是您的提交id

通过此操作,您可以轻松恢复所有已删除的文件。

您总是可以git还原删除文件的提交。(这假设删除是提交中唯一的更改。)

> git log
commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3
Author: Dave <dave@domain.com>
Date:   Thu May 9 11:11:06 2019 -0700

    deleted readme.md

如果您继续工作,并且后来意识到您不想提交删除提交,则可以使用以下方法进行恢复:

> git revert 2994bd

现在git日志显示:

> git log
Author: Dave <dave@domain.com>
Date:   Thu May 9 11:17:41 2019 -0700

    Revert "deleted readme"

    This reverts commit 2994bda49cd97ce49099953fc3f76f7d3c35d1d3.

readme.md已恢复到存储库中。