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

CircleCI中如何在config.yaml获取被合并的源分支名称

CircleCI 合并场景获取源分支名称实现方案

背景说明

CIRCLE_BRANCH 内置变量返回的是CI作业运行所在的分支,当feature分支合并到main后,作业运行在main分支上,因此该变量只会返回main,无法直接获取被合并的源分支名称。

可用方案

方案1:PR/MR触发场景直接读取内置变量

如果你的合并操作是通过PR(GitHub)/MR(GitLab)流程触发,可直接使用CircleCI针对PR事件的专属内置变量CIRCLE_PR_HEAD_REF,该变量会直接返回PR的源分支名称:

# .circleci/config.yaml 配置示例
steps:
  - run:
      name: 提取目标分支名称
      command: |
        # PR场景取源分支,普通push场景兜底取当前运行分支
        EXPECT_BRANCH=${CIRCLE_PR_HEAD_REF:-$CIRCLE_BRANCH}
        echo $EXPECT_BRANCH

方案2:无PR流程场景通过Git日志提取

如果是本地合并后直接推送到main分支、没有走PR流程,可以通过Git的合并提交日志提取源分支名称:

steps:
  - run:
      name: 从Git提交记录提取合并源分支
      command: |
        # 读取最近一次合并提交的日志,匹配提取源分支名
        MERGED_SOURCE_BRANCH=$(git log -1 --merges --pretty=format:'%s' | grep -oP 'Merge branch \'\K[^\']+')
        # 非合并提交场景兜底取当前运行分支
        EXPECT_BRANCH=${MERGED_SOURCE_BRANCH:-$CIRCLE_BRANCH}
        echo $EXPECT_BRANCH

注意事项

  • 方案2仅适用于未开启squash merge、rebase merge的场景,上述两种合并模式会抹除标准合并提交记录,无法通过日志匹配到源分支名
  • 开启squash merge/rebase merge的场景只能通过方案1的PR专属变量获取源分支名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 14:48:04