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

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

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


当前回答

如果删除了最新HEAD提交中存在的文件,则可以使用以下方法恢复该文件:

git checkout HEAD -- path/to/file.ext

其他回答

这是我发现的最简单的解决方案,如果您只想在master中恢复相同的文件:

git checkout master -- path/to/File.java

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

git checkout <file path with name>

下面的例子对我很有用:

git checkout resources/views/usaSchools.blade.php

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

列出该文件的所有提交。

git log -- path/to/file

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

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

我必须从一个特定的提交中恢复一堆已删除的文件,我用两个命令进行管理:

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清除。我需要恢复这些文件,但随后又将其拆下。我有数百个文件要恢复,像其他示例中那样手动为每个文件键入内容太慢了。

优点:以下方法确实适用于文件/文件夹甚至从垃圾箱或回收站删除的情况。

文件/文件夹已从工作树中删除,但尚未提交:

I.如果您尚未对更改进行索引(gitadd),则可以还原目录的内容:

git restore--路径/to/folder_OR_file

二、如果删除已被索引,则应首先重置:

git reset—路径/to/folder_OR_file

然后执行,git restore path/to/folder_OR_file

文件/文件夹在过去的某些提交中被删除:

使用git-log--diff-filter=D--summary获取删除文件/文件夹的提交的详细信息;使用gitcheckout$commit~1path/to/folder_OR_file还原删除的文件/文件夹。其中$commit是您在步骤1中找到的提交的sha值,例如c7578994