You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何列出Git分支历史中已删除且未重新添加的文件?

如何列出Git中曾被删除且当前分支最新提交不存在的文件

原命令git log --all --pretty=format: --name-only --diff-filter=D会列出所有历史中被删除过的文件,但无法排除那些删除后又被重新添加的文件(比如示例里的aaa.txt)。以下是满足需求的解决方案:

仅输出符合条件的文件名

执行以下命令,会仅列出曾被删除且当前分支最新提交中不存在的文件:

git log --diff-filter=D --pretty=format: --name-only | sort | uniq -c | while read count file; do
  if ! git ls-files --error-unmatch "$file" > /dev/null 2>&1; then
    echo "$file"
  fi
done

逻辑说明

  1. git log --diff-filter=D --pretty=format: --name-only:筛选出所有包含文件删除操作的提交,仅提取被删除的文件名
  2. sort | uniq -c:对文件名去重,统计每个文件被删除的次数
  3. 循环检查每个文件:用git ls-files --error-unmatch判断文件是否存在于当前分支的最新提交中,不存在则输出文件名

结合你的示例执行后,只会输出bbb.txt,符合预期。

同时显示文件被删除的最近提交

如果需要同时查看文件被删除的最近提交信息(哈希+提交说明),可以用以下命令:

git log --diff-filter=D --name-only --pretty=format:"%h %s" | awk '/^[0-9a-f]/ {commit=$0; next} {files[$0] = commit} END {for (f in files) {if (system("git ls-files --error-unmatch \"" f "\" > /dev/null 2>&1") != 0) print files[f], f}}'

逻辑说明

  1. git log --diff-filter=D --name-only --pretty=format:"%h %s":捕获每个删除提交的简短哈希、提交说明,以及对应的被删除文件名
  2. 通过awk将每个文件关联到它被删除的最近提交
  3. 最后检查文件是否存在于当前最新提交,不存在则输出对应的提交信息和文件名

在你的示例中执行后,会输出类似:

abc1234 delete aaa.txt, bbb.txt bbb.txt

内容的提问来源于stack exchange,提问作者mclayton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:01:15