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

如何用git/gh CLI检测本地分支PR状态及是否已Squash合并到GitHub主分支?

检测本地分支是否提交过GitHub PR及识别未合并分支

单分支PR关联检测(含所有状态)

因为团队用Squash合并后,本地分支的原始提交ID不会出现在main分支日志里,得通过GitHub的PR记录来查询。用gh CLI可以直接搜索关联目标分支的所有PR:

  1. 切换到要检测的本地分支:
    git checkout <你的本地分支名>

  2. 搜索所有状态的关联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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:55:14