如何在 Git 提交历史中查找被删除的文件

列出历史上的删除记录:git log --diff-filter=D --summary 显示所有删除文件及所在提交;按内容搜用 git log -S"关键词";确认路径后 git log --all -- <路径> 追踪该文件的完整历史。

最佳实践
Git 提交历史与版本恢复示意

Git 不会忘记任何提交过的文件。 列出全部删除事件用 git log --diff-filter=D --summary;知道大概内容用 git log -S"关键词" 做全文考古;确认路径后 git log --all -- 路径 看它的完整生命周期。

列出所有删除记录

git log --diff-filter=D --summary | grep delete
# delete mode 100644 src/legacy/old-module.js
# ...

按内容搜索(不记得文件名)

git log -S"calculateDiscount" --oneline --all     # 含这段代码的提交变动
git log -G"password|secret" --oneline --all        # 正则版本

-S 找"该字符串出现/消失"的提交,-G 支持正则、匹配范围更宽。

按路径追踪

git log --all --oneline -- path/to/file    # 该文件的所有历史(跨分支)
git log --all --diff-filter=A -- 路径       # 它在哪次提交诞生
git log --all --diff-filter=D -- 路径       # 在哪次被删

找到之后

git show <删除提交>^:路径        # 看删除前的内容
git restore --source=<删除提交>^ 路径   # 恢复到工作区

常见问题(FAQ)

Q:文件被重命名过,历史断在改名点怎么办?

git log --follow -- 路径 跨重命名跟踪。注意 --follow 一次只跟一个路径。

Q:整个目录被删了怎么查?

路径参数接受目录:git log --diff-filter=D --summary -- src/old-module/,同样能找到。

Q:想找出"谁删的"?

git log --diff-filter=D --format='%h %an %ad %s' -- 路径,作者、时间、提交说明一目了然。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台