如何获取已被squash合并到upstream仓库的分支列表?
如何找出已通过Squash合并到upstream的本地分支列表
核心思路
Squash合并会将分支的多个提交整合成一个新提交并入上游仓库,原分支的提交不会出现在上游的提交历史中,因此无法用git branch --merged这类基于提交历史的命令直接识别。我们可以通过对比分支与上游分支的变更内容,判断分支的所有修改是否已被包含到上游。
操作步骤
拉取上游仓库最新代码
先确保本地已获取上游仓库的最新提交:git fetch upstream检查单个分支是否已被合并
针对某个本地分支(比如foo),执行以下命令对比其与上游主分支的变更:git diff upstream/main...foo- 如果命令无输出,说明该分支的所有修改已被包含到
upstream/main(无论是通过squash还是普通合并)。 - 如果有输出,说明分支仍有未被合并的变更。
- 如果命令无输出,说明该分支的所有修改已被包含到
批量遍历所有本地分支
用脚本自动检查所有本地分支,输出已被合并的分支列表: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
相关产品推荐
相关产品推荐

