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

如何找出未合并到master的Git分支并简化提交日志?

快速定位未合并到Master的Git分支

当然可以!面对大型Git仓库,密密麻麻的提交图确实让人头大,我这里有几个实用的方法,能帮你快速筛选出那些从未合并到master的分支,甚至只聚焦每个分支的最新提交来做对比:

1. 直接列出未合并分支(最省心)

Git自带了专门的参数来区分已合并和未合并的分支,完全不用看提交图:

git branch --no-merged master

这条命令会直接输出所有没有将提交合并到master的本地分支。反过来,如果你想确认哪些分支已经完全合并,可以用:

git branch --merged master

2. 自定义输出:分支名 + 最新提交 + 差异信息

如果还想同时看到每个未合并分支的最新提交详情,比如提交哈希、提交信息,甚至未合并的提交数量,可以用git for-each-ref来定制输出。

比如先看所有分支的基本信息:

git for-each-ref --format='%(refname:short) | %(objectname:short) | %(subject)' refs/heads/

输出会是这样的格式:

feature/login | a1b2c3d | Fix login validation bug
bugfix/404-page | xyz789 | Update 404 page content
master | abc123 | Release v2.0

如果要精准筛选未合并到master的分支,并显示它们的未提交数量和最新提交,可以用这个小脚本:

git for-each-ref --format='%(refname:short)' refs/heads/ | while read branch; do
  # 跳过master分支本身
  if [ "$branch" = "master" ]; then continue; fi
  # 检查分支是否完全合并到master
  merge_base=$(git merge-base master "$branch")
  branch_head=$(git rev-parse "$branch")
  if [ "$merge_base" != "$branch_head" ]; then
    commit_count=$(git log --oneline master.."$branch" | wc -l)
    echo "🔴 $branch 有 $commit_count 个未合并提交,最新提交:"
    git log --oneline --no-merges -1 "$branch"
    echo "---"
  fi
done

它会遍历所有本地分支,跳过master,然后判断分支顶端是否和master的合并基点一致——如果不一致,就说明有未合并的提交,同时输出最新的那条提交信息。

3. 简化提交图:只看分支顶端

如果你还是想通过提交图来直观查看,可以用--simplify-by-decoration参数让Git只显示带有分支、标签等标记的提交(也就是每个分支的顶端和关键节点),这样提交图会清爽很多:

git log --oneline --decorate --graph --all --simplify-by-decoration

这个命令会把所有非分支/标签的中间提交隐藏,只保留每个分支的“顶端”提交,你一眼就能看出哪些分支和master没有连接。

小提示

  • 如果你的仓库有远程分支,记得先执行git fetch origin拉取最新状态,然后把命令里的refs/heads/换成refs/remotes/origin/就能检查远程分支了。
  • 对于已经确认合并的分支,可以用git branch -d [分支名]安全删除(Git会拒绝删除未合并的分支,不用担心误删)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:03:49