如何用git/gh CLI检测本地分支PR状态及是否已Squash合并到GitHub主分支?
检测本地分支是否提交过GitHub PR及识别未合并分支
单分支PR关联检测(含所有状态)
因为团队用Squash合并后,本地分支的原始提交ID不会出现在main分支日志里,得通过GitHub的PR记录来查询。用gh CLI可以直接搜索关联目标分支的所有PR:
切换到要检测的本地分支:
git checkout <你的本地分支名>搜索所有状态的关联PR:
gh pr list --state all --head <你的本地分支名>
--state all覆盖开启、合并、关闭三种状态的PR- 如果本地分支和远程分支同名,直接写分支名即可;如果不同,要写成
origin/<远程分支名> - 有结果输出就说明该分支提交过PR,结果里会显示PR编号、状态和标题
如果要在脚本里批量处理,用结构化输出更方便:gh pr list --state all --head <分支名> --json number,state,title
批量检测所有本地分支
可以写个简单的bash脚本遍历所有本地分支,自动查询每个分支的PR关联情况:
#!/bin/bash # 遍历所有本地分支(只显示分支名) for branch in $(git branch --format='%(refname:short)'); do echo "=== 检测分支:$branch ===" # 查询该分支的所有状态PR pr_result=$(gh pr list --state all --head "$branch" --json number,state) # 判断是否有PR记录(空数组[]表示无) if [ "$pr_result" != "[]" ]; then echo "找到关联PR:$pr_result" else echo "未找到关联PR" fi done
识别未合并的本地分支
由于Squash合并的特殊性,直接用git log对比提交ID没用,推荐两种方法结合:
方法1:用git cherry检测内容差异
先同步main分支的最新代码:git switch main && git pull
然后检测目标分支的提交是否在main中没有对应内容:git cherry main <你的本地分支名>
- 输出
+开头的提交,表示该提交的内容未在main分支中出现(注意:Squash合并后的新提交会包含原内容,但git cherry会因为提交ID不同标记为+,所以这个结果仅供参考)
方法2:结合PR状态判断(更准确)
如果分支有PR记录,直接看PR的状态:
- 若PR状态为
merged:说明分支内容已通过Squash合并到main,属于已合并分支 - 若PR状态为
closed且未合并,或无PR记录:再用git cherry辅助判断内容是否已合并
内容的提问来源于stack exchange,提问作者TomNorway
相关产品推荐
相关产品推荐

