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

标签 git file-io git-checkout

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

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

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

最佳答案

找到影响给定路径的最后一次提交。由于该文件不在 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 存储库中查找和恢复已删除的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953481/

相关文章:

c++ - 从这个文本文件中读入和分离信息的好方法是什么?

git - git checkout 会先自动获取吗?

git - 无法使用 Bamboo Remote Agent 克隆存储库

git - Git 存储库中缺少文件

git - 为什么我不能将镜像推送到 github?

git - 有没有办法在 git checkout 中使用通配符?

git - 在 git 中切换分支 - 我什么时候会得到 "You have local changes cannot switch branches."?

Git 庆典错误 : Could not fork child process: There are no available terminals (-1)

matlab - Matlab科学记数法中的前导零

python - 如何替换被测模块的文件访问引用