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

如何在GitHub Actions中获取分支倒数第二个提交SHA并设为输出

解决GitHub Actions中获取分支倒数第二个提交哈希的问题

问题根源

actions/checkout@v3 默认采用浅克隆模式,仅拉取分支的最新1个提交(默认参数fetch-depth: 1),本地仓库没有足够的提交历史,因此执行git rev-parse HEAD~1时会找不到对应的修订版本,触发报错。

修复方案

修改actions/checkout步骤,添加fetch-depth参数拉取足够的提交历史:

  • 设置fetch-depth: 0:拉取完整仓库历史,适用于需要访问任意历史提交的场景
  • 设置fetch-depth: 2:仅拉取最新2个提交,满足当前需求且更高效

修改后的完整工作流代码:

on: workflow_dispatch

jobs:
  get_prev_sha:
    name: get previous sha of main
    runs-on: ubuntu-latest
    outputs:
      prev_sha: ${{ steps.prev_sha.outputs.prev_sha }}
    steps:      
      - name: Checkout repository with sufficient history
        uses: actions/checkout@v3
        with:
          ref: 'main'
          fetch-depth: 2  # 拉取最近2个提交,刚好满足获取上一个提交的需求

      - name: Get last commit SHA
        id: prev_sha
        run: |
          echo "prev_sha=$(git rev-parse HEAD~1)" >> "$GITHUB_OUTPUT"

替代方案(无需修改克隆深度)

如果不想调整克隆深度,也可以通过GitHub API直接获取目标分支的上一个提交哈希:

on: workflow_dispatch

jobs:
  get_prev_sha:
    name: get previous sha of main
    runs-on: ubuntu-latest
    outputs:
      prev_sha: ${{ steps.prev_sha.outputs.prev_sha }}
    steps:      
      - name: Get previous commit SHA via GitHub API
        id: prev_sha
        run: |
          prev_sha=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            "https://api.github.com/repos/${{ github.repository }}/commits/main" | jq -r '.parents[0].sha')
          echo "prev_sha=$prev_sha" >> "$GITHUB_OUTPUT"

注:Ubuntu-latest环境默认预装jq工具,GITHUB_TOKEN默认拥有仓库读取权限,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:12:49