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

