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

如何获取PR所有提交中的全部文件及其状态

解决GitHub Action中获取PR所有文件状态的问题

要在GitHub Action中获取PR所有文件的新增/修改/删除状态,你可以用以下几种方案:

方案1:用git diff对比基准分支与PR分支

直接对比PR的目标分支和PR分支的差异,就能拿到所有变更文件的状态:

git diff --name-status origin/${{ github.base_ref }}...origin/${{ github.head_ref }}

输出示例:

M       data/foo.txt
A       data/bar.txt

状态码说明:A=新增,M=修改,D=删除,R=重命名等。

之前的git diff --name-status -r HEAD^1 HEAD仅对比最后一次提交,而PR可能包含多个提交,所以需要对比分支间的整体差异。

方案2:用gh CLI结合jq推导状态

利用gh pr view返回的additions和deletions字段,通过jq判断文件状态:

gh pr view ${PR_NUMBER} --json files | jq '.files[] | {path: .path, status: (if .deletions == 0 then "A" elif .additions == 0 then "D" else "M" end)}'

输出示例:

{
  "path": "data/foo.txt",
  "status": "M"
}
{
  "path": "data/bar.txt",
  "status": "A"
}

方案3:用GitHub REST API直接获取状态

调用GitHub官方API的PR文件接口,直接返回每个文件的状态:
在GitHub Action中可以用actions/github-script实现:

- name: 获取PR文件及状态
  uses: actions/github-script@v6
  id: pr-files
  with:
    script: |
      const files = await github.rest.pulls.listFiles({
        owner: context.repo.owner,
        repo: context.repo.repo,
        pull_number: context.issue.number
      });
      return files.data.map(file => ({path: file.filename, status: file.status}));
    result-encoding: json

之后可以通过${{ steps.pr-files.outputs.result }}获取带状态的文件列表,返回的status字段值包括added、modified、removed等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:40:03