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

GitHub Action执行git diff报错:无法访问提交SHA

解决GitHub Action中git diff找不到旧提交SHA的问题

你的问题出在两个核心点:

  1. 配置里缺少拉取仓库代码的步骤,GitHub Action的运行环境是全新的容器,默认不会自动拉取你的仓库代码;
  2. 即使添加默认拉取步骤,GitHub Actions默认采用浅克隆(仅拉最新1个提交),导致github.event.before对应的旧提交不在本地仓库中,git无法访问该SHA。

修复方案

添加actions/checkout步骤并配置拉取完整仓库历史,或者至少拉取足够覆盖目标提交的深度:

修改后的完整配置如下:

name: If files in folder_path were changed

on:
  push:

jobs:
  if-file-changed:
    name: Check if files changed
    runs-on: ubuntu-latest
    steps:
      - name: 拉取仓库代码
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # 拉取完整仓库历史,确保所有提交SHA都能被访问

      - name: 获取push事件中变更的文件
        run: |
          echo ${{ github.sha }} - 触发工作流的提交SHA
          echo ${{ github.event.before }} - 上一个提交SHA
          git --no-pager diff --name-only ${{ github.sha }} ${{ github.event.before }}

补充说明

  • 如果不需要完整仓库历史,也可以设置fetch-depth: 2(因为push事件中github.event.before是触发提交的前一个提交,拉取2个提交就能覆盖),但如果存在强制推送等特殊情况,fetch-depth: 0是最稳妥的选择;
  • 本地执行命令正常是因为你的本地仓库已经有完整的提交历史,而GitHub Action的运行环境是全新的,必须手动拉取仓库代码才能执行git相关操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:45:42