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

假设我在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来恢复被删除的文件。

  • 要恢复文件夹中所有已删除的文件,请输入以下命令。

    git ls-files -d | xargs git checkout --
    
    链接地址: http://www.djcxy.com/p/413.html

    上一篇: Find and restore a deleted file in a Git repository

    下一篇: Can I store the .git folder outside the files I want tracked?