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

问题描述

查找影响给定路径的最后一个提交。由于该文件不在 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 存储库中。我删除一个文件并提交该更改。我继续工作并做出更多的承诺。然后,我发现我需要恢复该文件。

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...