如何查找指定提交SHA首次被合并的合并提交SHA?
如何查找指定提交SHA首次被合并的合并提交SHA?
我完全懂你的困扰——你要找的是某个提交第一次被合并到其他分支的那个合并提交,而不是后续从上游分支再合并过来的那些(比如你场景里的merge #2,其实只是把包含fix的release分支合并到main,并不是fix提交的首次合并)。针对这个需求,这里有几个实用的Git命令方案:
方案1:用git rev-list精准定位最早的合并提交
这个命令会直接输出你要的SHA,无需手动筛选:
git rev-list --merges --ancestor-path <你的fix提交SHA>..<目标分支名或最新提交SHA> | tail -n 1
参数解释:
--merges:只筛选合并提交,排除普通提交--ancestor-path:确保只追踪从fix提交到目标分支的直接路径,不会混入其他无关分支的合并记录tail -n 1:因为git rev-list默认是从新到旧排序,取最后一条就是最早的那个合并提交(也就是你的merge #1)
方案2:用git log可视化筛选
如果你想先看看所有相关的合并提交再确认,这个命令更直观:
git log --merges --oneline --contains=<你的fix提交SHA> --reverse <分支范围>
比如针对你的场景,你可以这样写:
git log --merges --oneline --contains=abc123 --reverse release main
参数解释:
--contains=<fix提交SHA>:只显示包含该fix提交的合并提交--reverse:把日志顺序反过来,从旧到新排列,第一条就是首次合并的记录<分支范围>:指定只在release和main分支里查找,避免其他分支的合并记录干扰
为什么之前的git find-merge没得到想要的结果?
之前的脚本大概率是在给定的SHA范围内,找最新的包含目标提交的合并提交,所以它返回了merge #2(因为merge #2比merge #1更新)。而我们上面的方法都是针对“最早”这个需求来调整的,刚好匹配你的场景。
备注:内容来源于stack exchange,提问作者DMCApps
相关产品推荐
相关产品推荐

