如何找出未合并到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
相关产品推荐
相关产品推荐

