假设我在 Git 存储库中。我删除一个文件并提交该更改。我继续工作并做出更多的承诺。然后,我发现我需要恢复该文件。
我知道我可以使用 签出文件git checkout HEAD^ foo.bar,但我真的不知道该文件何时被删除。
git checkout HEAD^ foo.bar
我希望我不必手动浏览我的日志,检查给定 SHA 的整个项目,然后手动将该文件复制到我的原始项目检查中。
查找影响给定路径的最后一个提交。由于该文件不在 HEAD 提交中,因此先前的提交必须已将其删除。
git rev-list -n 1 HEAD -- <file_path>
^然后使用插入符号 ( )签出之前提交时的版本:
^
git checkout <deleting_commit>^ -- <file_path>
或者在一个命令中,如果$file有问题的文件。
$file
git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"
如果您使用 zsh 并启用了 EXTENDED_GLOB 选项,则插入符号将不起作用。你可以~1改用。
~1
git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"