如何在未知合并哈希时获取Release分支两次合并间的Feature分支列表
获取Git合并提交间的Feature分支与提交列表
一、获取Feature分支列表(通用方式,无需手动指定哈希)
Git没有原生直接列出合并提交关联分支的命令,但可以通过脚本批量检查(前提是Feature分支未被删除且命名有规律,比如统一前缀features/):
方法1:基于合并提交消息检查
如果合并Feature分支时使用默认的Merge branch 'xxx'消息,可通过匹配日志关键词筛选:
# 遍历所有features前缀的分支 for branch in $(git branch --list 'features/*'); do # 检查该分支的合并记录是否存在于release最近两次合并提交之间 if git log --oneline release~2..release --grep="Merge branch '$branch'" --quiet; then echo "$branch" fi done
方法2:基于提交祖先关系检查
如果合并消息被修改过,可通过提交的祖先关系判断分支是否被合并到目标区间:
# 定义区间起点(release上上次合并提交的父节点)和终点(当前release HEAD) START=$(git rev-parse release~2) END=$(git rev-parse release) for branch in $(git branch --list 'features/*'); do # 分支提交已包含在END,但未包含在START,说明是在两次合并之间被合并的 if git merge-base --is-ancestor "$branch" "$END" && ! git merge-base --is-ancestor "$branch" "$START"; then echo "$branch" fi done
⚠️ 注意:如果Feature分支在合并后还有新提交,此方法会误判,需确保合并后Feature分支不再改动。
二、获取提交列表(更可靠的方案)
无需手动指定哈希,直接通过相对引用定位区间,即可获取两次合并之间的所有提交:
1. 显示区间内所有提交(含合并提交)
git log --oneline release~2..release
2. 仅显示Feature分支的提交(排除合并提交)
git log --oneline --no-merges release~2..release
3. 显示仅存在于release中但不在上上次合并前的提交
git cherry release~2 release
此命令会输出每个提交的哈希和摘要,标记+表示仅在release中存在的提交,也就是两次合并之间新增的提交。
内容的提问来源于stack exchange,提问作者onion
相关产品推荐
相关产品推荐

