说我在 Git 存储库中。我删除了一个文件并提交了更改。我继续工作,并做了一些更多的提交。然后,我发现我需要恢复该文件。
我知道我可以使用git checkout HEAD^ foo.bar
签出文件,但我真的不知道该文件何时被删除。
我希望我不必手动浏览我的日志,检查整个项目的给定 SHA,然后手动将该文件复制到我的原始项目结帐中。
查找影响给定路径的最后一次提交。由于该文件不在 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"
git log --diff-filter=D --summary
来获取已删除文件和删除文件的所有提交; git checkout $commit~1 filename
恢复已删除的文件。 其中$commit
是您在步骤 1 中找到的提交值,例如e4cf499627
要还原文件夹中的所有已删除文件,请输入以下命令。
git ls-files -d | xargs git checkout --