如何查看哪些分支包含某个提交
查看包含某提交的分支:git branch --contains <提交哈希>,加 -a 包含远程分支,-r 只看远程。查标签用 git tag --contains。判断"这个修复进了哪些发布分支"时最常用。
git branch --contains <提交哈希>:列出所有包含该提交的本地分支;加 -a 把远程跟踪分支也算上,-r 只看远程。典型用途:确认一个 bugfix 提交到底进了哪些分支、哪个版本还没带这个修复。
用法
git branch --contains a1b2c3d # 本地分支
git branch -a --contains a1b2c3d # 本地 + 远程
git branch -r --contains a1b2c3d # 只看远程
git tag --contains a1b2c3d # 哪些标签包含它(查进了哪个版本)
实际场景
# 这个 hotfix 进了哪些发布线?
git branch -r --contains 9f8e7d6 | grep release
# 这个提交随哪个版本发出的?
git tag --contains 9f8e7d6 | sort -V | head -1
反向问题:这个提交有没有进 main
git merge-base --is-ancestor a1b2c3d main && echo "已进 main" || echo "未进"
--contains 是"列名单",--is-ancestor 是"是非判断",脚本里用后者。
常见问题(FAQ)
Q:cherry-pick 过去的提交为什么 --contains 查不到?
cherry-pick 产生新哈希的提交,原提交不在目标分支的祖先链上。判断内容是否已进某分支用 git cherry main feature-x。
Q:刚提交的分支为什么远程查不到?
远程引用是本地缓存。先 git fetch --all 再查 -r 版本才准。
Q:能按作者/日期过滤这些分支吗?
管道接 for-each-ref:git branch -a --contains <哈希> 拿到名单后逐个 git log -1 --format='%an %ad' 分支。