如何在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
相关产品推荐
相关产品推荐

