如何查清文件是什么时候、被谁删除的
定位文件的删除提交:git log --diff-filter=D --format 带作者日期 -- <路径>,最后一条就是删除提交;git show <哈希> 看删除现场(改了哪些文件、提交信息)。配合 git blame 其父提交可追溯此前每行的来历。
用 git log --diff-filter=D 过滤出该文件的删除提交,并带上作者和日期:
git log --diff-filter=D --format='%h | %an | %ad | %s' --date=iso -- path/to/file
输出里那条"删除"记录就是案发时间线:哈希 | 作者 | 日期 | 提交说明。
查看删除现场
git show <哈希> # 这次提交的完整 diff 和说明
git show <哈希> --stat # 只看文件清单
追溯删除前的最后内容
git show <删除提交>^:path/to/file # 文件最后的完整内容
git blame <删除提交>^ -- path/to/file # 每一行最后是谁改的
blame 锁定到删除前的父提交(^),能看到文件"生前"每一行的作者——做代码考古和事故复盘时的利器。
反向恢复
git restore --source=<删除提交>^ -- path/to/file # 恢复内容
# 或 revert 整个删除提交(它还动了别的文件时更合适)
git revert <删除提交>
常见问题(FAQ)
Q:提交说明没写清楚为什么删,怎么查上下文?
git show <哈希> 看同批删了什么;提交哈希去 GitHub/CI 上查关联的 PR/MR,评审讨论里通常有原因。
Q:文件可能是改名而不是删除?
git log --follow --name-status -- 路径 观察是否有 R(rename)记录——R100 旧名 新名 说明只是搬家。
Q:能按时间范围过滤吗?
git log --diff-filter=D --since="2026-06-01" --until="2026-09-01" -- 路径,缩小考古范围。