You need to enable JavaScript to run this app. 检出release分支头后如何获取已合并至master的已删除Git分支名
优惠活动
大模型
产品
解决方案
定价
更多

检出release分支头后如何获取已合并至master的已删除Git分支名

常规查询命令的失效原因

你执行的git branch --list -a --merged,本质是遍历本地仓库现存的所有分支引用(也就是refs目录下仍未删除的指针文件),筛选出已合并到当前检出分支的条目。那些合并到master后就被删除的特性分支,对应的分支指针已经被从refs目录移除,自然不会出现在返回结果里。
分支本身只是指向特定提交的轻量指针,并非独立存放在Git对象库的实体,只要指针被删除,常规的git branch类命令就无法感知到它的存在。

具体查询方式

因为你的release分支是从master分支合并而来的,当前检出的release提交历史,已经完整覆盖了master分支上所有曾经合入的提交记录,不需要额外切回master就可以完成查询:

  • 依托Git留存的全量reflog记录(reflog会保存所有分支指针的变动历史,哪怕分支本身已经被删除),可以追溯出所有曾经存在过的分支名称,再通过提交的祖先关联关系,筛选出已合并进master的被删除分支。
  • 直接执行下面的命令,就能一次性返回所有符合查询要求的已删除分支名称:
git reflog show --all --format='%gs' | grep -E 'moving from [^/]+/' | awk -F'/' '{print $NF}' | sort -u | xargs -I{} sh -c 'git merge-base --is-ancestor {} master 2>/dev/null && echo {}'

命令执行逻辑

  • 先通过全量reflog抓取所有曾经发生过指针变动的分支名,不管分支现在是否仍然存在
  • 再通过git merge-base --is-ancestor做校验:如果某个分支曾经指向的提交历史,是master分支当前提交的祖先,就说明这个分支在被删除前,已经成功合并进了master分支
  • 整个过程不需要额外拉取远程仓库数据,基于本地已有的提交历史和reflog记录就可以完成查询

注意:如果本地reflog已经因为过期触发了自动清理,这类被删除的分支记录将无法通过本地查询找回,需要依托远程仓库的合并记录反向追溯。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 10:24:03