一尘不染

如何在 Git 存储库中查找和恢复已删除的文件

git

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

我知道我可以使用 签出文件git checkout HEAD^ foo.bar,但我真的不知道该文件何时被删除。

  1. 找到删除给定文件名的提交的最快方法是什么?
  2. 将该文件恢复到我的工作副本中的最简单方法是什么?

我希望我不必手动浏览我的日志,检查给定 SHA 的整个项目,然后手动将该文件复制到我的原始项目检查中。


阅读 266

收藏
2022-01-23

共1个答案

一尘不染

查找影响给定路径的最后一个提交。由于该文件不在 HEAD 提交中,因此先前的提交必须已将其删除。

git rev-list -n 1 HEAD -- <file_path>

^然后使用插入符号 ( )签出之前提交时的版本:

git checkout <deleting_commit>^ -- <file_path>

或者在一个命令中,如果$file有问题的文件。

git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"

如果您使用 zsh 并启用了 EXTENDED_GLOB 选项,则插入符号将不起作用。你可以~1改用。

git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"
2022-01-23