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

如何在GitHub Action中获取纯分支名称?含推送、拉取请求场景

在GitHub Actions中提取干净的分支名(区分Push/Pull Request)

刚好我之前也处理过这个需求,在GitHub Actions里区分push和PR场景提取干净的分支名,其实有非常简洁的官方方案,不用自己写复杂的字符串切割逻辑,给你梳理清楚:

1. Push操作:提取当前分支名

针对push事件,GitHub Actions提供了${{ github.ref_name }}这个内置变量,它会直接返回不带前缀的分支名(比如develop、feature/user-profile),完美符合你的需求,这是最推荐的方式。

如果你的Workflow需要兼容旧版本的Actions(现在很少见了),也可以用字符串替换手动去掉refs/heads/前缀:

${{ replace(github.ref, 'refs/heads/', '') }}

2. Pull Request操作:提取目标分支名

对于PR事件,要获取目标分支(也就是base分支),直接用${{ github.base_ref }}就好!这个变量本身就是干净的分支名格式,完全不需要处理refs/pull/...这类复杂的ref路径。

小提示:如果需要获取PR的源分支(发起PR的分支),可以用${{ github.head_ref }},不过你要的是目标分支,所以base_ref是正确选择。

完整Workflow示例

下面是一个可直接复用的示例,会根据事件类型自动提取对应的分支名:

name: Extract Clean Branch Name
on:
  push:
    branches: ['*']
  pull_request:
    branches: [master, develop]

jobs:
  get-branch-info:
    runs-on: ubuntu-latest
    steps:
      - name: Determine target branch
        id: get_branch
        run: |
          if [ "${{ github.event_name }}" = "push" ]; then
            BRANCH="${{ github.ref_name }}"
          elif [ "${{ github.event_name }}" = "pull_request" ]; then
            BRANCH="${{ github.base_ref }}"
          fi
          echo "branch_name=$BRANCH" >> $GITHUB_OUTPUT
      
      - name: Verify branch name
        run: echo "The final clean branch name is: ${{ steps.get_branch.outputs.branch_name }}"

这个示例里,我们通过判断github.event_name区分事件类型,提取对应的分支名后存入step的输出变量,后续步骤可以直接引用这个变量,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:22:34