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

在Push触发的GitHub Actions工作流中如何获取PR基准分支?

在Push触发的GitHub Actions中获取PR基准分支(无需GH REST API)

可以通过Git命令直接从远程引用中推导,不需要调用GH REST API,步骤如下:

  • 第一步:匹配对应PR编号
    Push事件上下文里的$GITHUB_SHA就是当前推送分支的提交SHA,用它匹配远程仓库中refs/pull/<PR号>/head的引用,提取PR编号:

    PR_NUMBER=$(git ls-remote | grep "$GITHUB_SHA" | grep -E 'refs/pull/[0-9]+/head' | sed -E 's/.*refs\/pull\/([0-9]+)\/head/\1/')
    
  • 第二步:获取PR基准分支的提交SHA
    GitHub会为每个PR生成refs/pull/<PR号>/merge虚拟引用,这个合并提交的第二个父节点就是PR基准分支的最新提交SHA:

    # 获取merge引用的SHA
    MERGE_SHA=$(git ls-remote | grep "refs/pull/$PR_NUMBER/merge" | awk '{print $1}')
    # 提取merge提交的第二个父节点SHA(基准分支SHA)
    BASE_SHA=$(git cat-file -p $MERGE_SHA | grep -A1 'parent' | tail -n1 | awk '{print $1}')
    

    注:如果本地仓库没拉取过这些PR引用,先执行git fetch origin refs/pull/*:refs/pull/*确保能访问到refs/pull下的内容。

  • 第三步:匹配基准分支名称
    用基准分支的SHA匹配远程仓库的分支引用,得到分支名称:

    BASE_BRANCH=$(git ls-remote | grep "$BASE_SHA" | grep 'refs/heads/' | sed -E 's/.*refs\/heads\/(.*)/\1/')
    
  • 第四步:查看PR变更文件
    直接对比基准分支SHA和当前推送的SHA,列出变更文件:

    git diff --name-only $BASE_SHA $GITHUB_SHA
    

注意事项

  • 该方法依赖GitHub自动生成的refs/pull/<PR号>/merge引用,若PR处于不可合并状态(比如冲突),这个引用可能不存在,此时可以考虑用git merge-base命令在本地计算基准,但需要先拉取基准分支的内容。
  • 如果同一个SHA对应多个分支(比如分支合并后的情况),BASE_BRANCH可能返回多个结果,需要根据实际场景做额外过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:26:17