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

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

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


当前回答

user@bsd:~/work/git$ rm slides.tex
user@bsd:~/work/git$ git pull 
Already up-to-date.
user@bsd:~/work/git$ ls slides.tex
ls: slides.tex: No such file or directory

还原删除的文件:

user@bsd:~/work/git$ git checkout
D       .slides.tex.swp
D       slides.tex
user@bsd:~/work/git$ git checkout slides.tex 
user@bsd:~/work/git$ ls slides.tex
slides.tex

其他回答

如果你只做了更改并删除了一个文件,但没有提交它,而现在你放弃了你的更改

git checkout -- .

但是删除的文件没有返回,只需执行以下命令:

git checkout <file_path>

很快,你的文件回来了。

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

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

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

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

获取已删除文件的所有提交以及已删除的文件:git-log--diff-filter=D--摘要记下所需的提交散列,例如e4e6d4d5e5c59c69f3bd7be2。将删除的文件从之前的一次提交(~1)还原到上面确定的提交(e4e6d4d5e5c59c69f3bd7be2):git签出e4e6d4d5e5c59c69f3bd7be2~1路径/to/file.ext注意~1。

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

$ git checkout -- <file>

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

$ git ls-files --deleted

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

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

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

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