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

如何获取已被squash合并到upstream仓库的分支列表?

如何找出已通过Squash合并到upstream的本地分支列表

核心思路

Squash合并会将分支的多个提交整合成一个新提交并入上游仓库,原分支的提交不会出现在上游的提交历史中,因此无法用git branch --merged这类基于提交历史的命令直接识别。我们可以通过对比分支与上游分支的变更内容,判断分支的所有修改是否已被包含到上游。

操作步骤

  1. 拉取上游仓库最新代码
    先确保本地已获取上游仓库的最新提交:

    git fetch upstream
    
  2. 检查单个分支是否已被合并
    针对某个本地分支(比如foo),执行以下命令对比其与上游主分支的变更:

    git diff upstream/main...foo
    
    • 如果命令无输出,说明该分支的所有修改已被包含到upstream/main(无论是通过squash还是普通合并)。
    • 如果有输出,说明分支仍有未被合并的变更。
  3. 批量遍历所有本地分支
    用脚本自动检查所有本地分支,输出已被合并的分支列表:

    for branch in $(git branch --format='%(refname:short)'); do
        # 跳过当前分支(可选)
        if [ "$branch" = "$(git rev-parse --abbrev-ref HEAD)" ]; then
            continue
        fi
        # 对比分支与上游的变更
        if [ -z "$(git diff upstream/main...$branch)" ]; then
            echo "$branch 已合并到 upstream/main"
        fi
    done
    

注意事项

  • 该方法基于内容对比,而非提交历史,因此能准确识别squash合并的分支。
  • 如果分支的部分变更被上游仓库revert,git diff会输出revert的差异,此时该分支不会被判定为已合并。

内容的提问来源于stack exchange,提问作者scarf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:43:12