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

如何用Git获取指定标签后合并到指定分支的分支列表?

获取指定标签后合并到目标分支的分支列表及语义化版本判断

一、Git命令直接获取分支列表

如果只是想提取符合fix/、feat/、break/命名规范的合并分支,可直接用以下命令(以标签v2.3.7、目标分支main为例):

# 适配多数合并提交消息格式,包括默认分支合并和PR合并
git log v2.3.7..main --merges --pretty=format:"%b" | grep -oE "(fix/|feat/|break/)[^[:space:]]+" | sort | uniq

命令拆解:

  • v2.3.7..main:限定提交范围,只读取从标签v2.3.7到当前main分支的所有提交
  • --merges:仅筛选合并提交(只有合并提交才对应被合并的功能分支)
  • --pretty=format:"%b":只输出提交正文,过滤掉提交哈希、作者等冗余信息
  • grep -oE "(fix/|feat/|break/)[^[:space:]]+":精准提取符合规范的分支名,-o表示只输出匹配部分,[^[:space:]]+匹配分支名直到空格结束
  • sort | uniq:去重,避免同一分支多次合并导致的重复输出

二、Bash脚本自动判断语义化版本

如果要直接根据分支名判断版本升级级别(主版本/次版本/补丁版本),可以用以下脚本:

#!/bin/bash

# 可自行修改的配置参数
TARGET_TAG="v2.3.7"
TARGET_BRANCH="main"

# 获取符合规范的合并分支列表
merged_branches=$(git log $TARGET_TAG..$TARGET_BRANCH --merges --pretty=format:"%b" | grep -oE "(fix/|feat/|break/)[^[:space:]]+" | sort | uniq)

# 初始化版本升级标记
has_break=0
has_feat=0
has_fix=0

# 遍历分支判断升级类型
for branch in $merged_branches; do
    case $branch in
        break/*) has_break=1 ;;
        feat/*) has_feat=1 ;;
        fix/*) has_fix=1 ;;
    esac
done

# 输出结果
echo "=== 合并分支列表(自$TARGET_TAG到$TARGET_BRANCH) ==="
echo "$merged_branches"
echo -e "\n=== 语义化版本升级建议 ==="
if [ $has_break -eq 1 ]; then
    echo "MAJOR 升级:存在break/前缀分支,包含不兼容的API变更"
elif [ $has_feat -eq 1 ]; then
    echo "MINOR 升级:存在feat/前缀分支,新增兼容性功能"
elif [ $has_fix -eq 1 ]; then
    echo "PATCH 升级:仅存在fix/前缀分支,仅修复bug"
else
    echo "无符合规范的分支合并,版本无需升级"
fi

使用方法:

  1. 将脚本保存为version-check.sh
  2. 赋予执行权限:chmod +x version-check.sh
  3. 运行脚本:./version-check.sh

注意事项:

  • 运行前确保本地目标分支是最新状态:先执行git fetch origin $TARGET_BRANCH和git checkout $TARGET_BRANCH && git pull
  • 如果团队的合并提交消息格式特殊(比如不包含分支名),需要调整git log的输出格式或grep的匹配规则,比如结合git show提取更多提交信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:10:18