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

如何列出指定基准Commit后所有分支中新增/修改的文件

查找指定基准提交后各分支新增/修改的文件

可以通过Git命令结合Shell脚本实现需求,以下是具体方案:

核心命令

将<BASE_COMMIT>替换为你的基准提交(标签、哈希值或分支名),执行以下命令:

echo "hash     branch  file"
echo "----     ------  ----"
git for-each-ref --format='%(refname:short)' refs/heads/ | while read branch; do
  git log --no-merges --pretty=format:"%h $branch" --name-only <BASE_COMMIT>..$branch | awk 'NF {if ($0 ~ /^[0-9a-f]{7}$/) hash=$0; else print hash, "'$branch'", $0}'
done | column -t

命令说明

  • git for-each-ref --format='%(refname:short)' refs/heads/:遍历所有本地分支,输出简洁分支名
  • git log --no-merges --pretty=format:"%h $branch" --name-only <BASE_COMMIT>..$branch:筛选该分支中在基准提交之后的非合并提交,输出提交短哈希、分支名及对应修改/新增的文件
  • awk:处理Git日志输出,将提交哈希与对应的文件关联匹配
  • column -t:自动对齐列,让输出格式更接近需求样式

适配场景调整

  1. 包含远程分支:将refs/heads/替换为refs/remotes/,注意远程分支会带有origin/前缀
  2. 包含合并提交:去掉命令中的--no-merges参数
  3. 处理含空格的文件路径:如果文件路径包含空格,可改用制表符分隔输出避免错位,命令如下:
echo -e "hash\tbranch\tfile"
echo -e "----\t------\t----"
git for-each-ref --format='%(refname:short)' refs/heads/ | while read branch; do
  git log --no-merges --pretty=format:"%h\t$branch" --name-only <BASE_COMMIT>..$branch | awk 'BEGIN {FS="\t"} NF {if ($1 ~ /^[0-9a-f]{7}$/) {hash=$1; current_branch=$2} else {print hash "\t" current_branch "\t" $0}}'
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:32:55