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

如何通过GitHub API获取特定Push事件关联的所有Pull Requests

如何从Push事件关联的提交中便捷获取对应的Pull Requests?

我想知道怎么从特定Push事件(比如推送到main分支)里快速拿到关联的所有Pull Requests。目前已经从Push事件中获取到了提交列表:

"commits":[
      {
         "id":"ac7196c04ba24f180d37d77209ae92d38ee9c222",
         "tree_id":"9a4abe48ace9e76d561be86ae822a39ff23456de",
         "distinct":false,
         "message":"Update x.txt",
         "timestamp":"2022-11-21T13:37:14+02:00",
         "url":"https://github.com/asf/asfasf/commit/ac7196c04ba24f180d37d77209ae92d38ee9c222",
         "author":{
            "name":"myname",
            "email":"email",
            "username":"username"
         },
         "committer":{
            "name":"GitHub",
            "email":"noreply@github.com",
            "username":"web-flow"
         },
         "added":[
            
         ],
         "removed":[
            
         ],
         "modified":[
            "x.txt"
         ]
      },
      {
         "id":"ac7196c04ba24f180d37d77209ae92d38ee9c111",
         "tree_id":"9a4abe48ace9e76d561be86ae822a39ff2342345",
         "distinct":false,
         "message":"Merge pull merge request #14 from x",
         "timestamp":"2022-11-21T13:37:14+02:00",
         "url":"https://github.com/asf/asfasf/commit/12313235235325",
         "author":{
            "name":"myname",
            "email":"email",
            "username":"username"
         },
         "committer":{
            "name":"GitHub",
            "email":"noreply@github.com",
            "username":"web-flow"
         },
         "added":[
            
         ],
         "removed":[
            
         ],
         "modified":[
            "x.txt"
         ]
      }
]

我存在以下疑问:

  • 无法区分哪个提交是来自其他分支的合并提交(若PR从分支A合并到分支B,再合并到main分支,我希望获取原始PR);
  • 查看Pull Requests API后,发现似乎需要拉取所有数据,再通过提交关联对应PR,请问是否有更简洁的实现方式?

解决方案

1. 识别合并提交并追踪原始PR

  • 快速识别合并提交:合并提交的消息通常包含Merge pull request #XXX格式的内容(比如你提供的第二个提交),这类提交就是合并PR时生成的。另外,也可以通过Commit API查看提交的父提交数量——合并提交会有2个及以上父提交,普通提交只有1个。
  • 追踪多层合并的原始PR:
    • 如果是多层合并(A→B→main),先解析当前合并提交消息里的PR编号,获取该PR的详情,里面会包含被合并的分支信息;
    • 再通过被合并分支的头提交SHA,调用Commit API获取该提交的关联PR,以此回溯就能找到最初的原始PR;
    • 也可以直接通过提交的父提交链,找到最开始的非合并提交,再关联对应的PR。

2. 更高效的PR关联方式

不用拉取全量PR数据,有两种简洁方法:

  • 单提交关联PR接口:使用GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls接口,传入Push事件里每个提交的SHA值,直接返回该提交关联的所有PR,无需拉取所有PR数据。
  • 利用合并提交的PR编号:对于已识别的合并提交,直接从消息里提取PR编号,调用GET /repos/{owner}/{repo}/pulls/{pull_number}接口获取PR详情,这是最直接高效的方式。
  • 批量查询优化:如果Push事件里有多个提交,可以用GitHub GraphQL API一次性查询多个提交的关联PR,减少HTTP请求次数,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:13