如何判断分支是否已经合并

判断分支是否已合并:git branch --merged 列出已合并分支(目标分支在列即已合并);精确判断用 git merge-base --is-ancestor <分支> main && echo merged;看远程分支用 git branch -r --merged。

最佳实践
Git 分支协作与合并示意

两种检查方式:列出式的 git branch --merged main——出现在列表里就是已合并;脚本式的 git merge-base --is-ancestor feature-x main && echo "已合并"(退出码 0 即已合并),适合写进自动化。

交互检查

git checkout main
git branch --merged          # 已合并进 main 的本地分支
git branch --no-merged       # 还没合并的(这些要留意)
git branch -r --merged       # 远程分支版本

精确判断(脚本友好)

if git merge-base --is-ancestor feature-x main; then
  echo "feature-x 已合并进 main"
else
  echo "未合并"
fi

原理:分支的顶端提交是 main 的祖先 = 它的所有提交都在 main 里。

注意 squash merge 的坑

GitHub 的 Squash and merge 把分支提交压成一个新提交——原分支提交并未进入 main,--merged 和 --is-ancestor 都会显示"未合并"!这时判断要看内容是否等价:

git cherry main feature-x     # 带 - 前缀的表示改动已在 main 中

squash 合并的分支删除时用 git branch -D(-d 会拒绝)。

常见问题(FAQ)

Q:--merged 显示已合并就能安全删除吗?

基本可以(-d 也是同样判断逻辑)。唯一例外:分支还被其他未合并分支依赖,或指向的提交是某 tag 的祖先之外的特殊用途。

Q:能查"什么时候合并的"吗?

git log --merges --oneline main | grep 分支名 找合并提交;git log --grep="分支名" --oneline main 也常有线索。

Q:远程分支怎么批量清理未合并的?

反过来用:git branch -r --no-merged main 列出未合并的远程分支,逐个确认是进行中还是该删。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台