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

如何在GitHub Actions推送工作流中获取源分支的SHA值?

在GitHub Actions工作流中获取被合并的源分支SHA值

可以实现,需根据合并方式和触发事件选择对应方案:

方案一:基于push事件(仅支持普通合并)

当PR以普通合并方式合并到master时,合并提交会有两个父提交:第一个是master分支原有的最后一次提交,第二个就是源分支的最后一次提交SHA。可通过git命令从合并提交中提取该SHA:

name: Merge PR
on:
  push:
    branches:
      - master

jobs:
  check:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码(需包含足够提交历史)
        uses: actions/checkout@v4
        with:
          fetch-depth: 2  # 必须设置为2或更大,才能获取合并提交的父提交
      - name: 获取源分支SHA
        run: |
          SOURCE_SHA=$(git rev-parse HEAD^2)
          echo "源分支SHA: $SOURCE_SHA"
          # 将SHA存入环境变量,供后续步骤使用
          echo "SOURCE_SHA=$SOURCE_SHA" >> $GITHUB_ENV

方案二:改用pull_request事件(支持所有合并方式)

如果PR可能使用squash或rebase合并(这两种方式不会生成合并提交),建议改用pull_request事件触发工作流。PR被合并时,事件对象中直接包含源分支的SHA信息,无需依赖git历史:

name: Merge PR
on:
  pull_request:
    branches:
      - master
    types: [closed]  # PR关闭时触发

jobs:
  check:
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true  # 仅当PR被合并时执行
    steps:
      - name: 获取源分支SHA
        run: |
          echo "源分支SHA: ${{ github.event.pull_request.head.sha }}"
          echo "SOURCE_SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV

注意:push事件中的github.sha是合并提交的SHA,而pull_request事件中的github.event.pull_request.head.sha是源分支的最后一次提交SHA,无论合并方式如何都能正确获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:16:14