如何通过GitHub API提取修复Issue的Pull Request与提交信息?
如何通过GitHub API提取关联修复Issue的PR或提交记录
GitHub UI上显示的「Fixed by XXX」关联,本质是基于提交/PR描述里的关键词引用规则(比如fixes #7696、closes #7696这类格式),API不会直接返回这个关联关系,但可以通过以下几种方式获取:
方法1:查询Issue的事件记录
调用GET /repos/{owner}/{repo}/issues/{issue_number}/events接口,获取该Issue的所有操作事件。在返回结果中,找到event字段为closed的条目:
- 如果Issue是被提交直接关闭的,该条目会包含
commit_id字段,通过这个ID可以调用GET /repos/{owner}/{repo}/commits/{commit_id}获取提交详情,进而追踪到对应的PR(如果提交来自PR)。 - 如果Issue是被PR合并关闭的,该条目会包含
pull_request对象,直接就能拿到PR的编号和信息。
示例请求(针对你提到的Issue):
GET /repos/broadinstitute/gatk/issues/7696/events
方法2:通过搜索API定位关联内容
利用GitHub搜索API,搜索仓库中包含目标Issue引用关键词的PR或提交:
- 搜索关联PR:
可以把GET /search/issues?q=repo:{owner}/{repo}+type:pr+"fixes #{issue_number}"fixes换成closes、resolves等GitHub支持的关闭关键词,扩大搜索范围。 - 搜索关联提交:
GET /search/commits?q=repo:{owner}/{repo}+"fixes #{issue_number}"
注意:搜索API有请求速率限制,建议携带认证令牌(Personal Access Token)提升限额,同时处理好分页逻辑。
方法3:遍历PR的关联Issue(适合小仓库)
如果仓库规模不大,可以遍历所有PR,调用GET /repos/{owner}/{repo}/pulls/{pull_number}接口,查看返回结果中的closed_issues字段,该字段会列出当前PR关闭的所有Issue,从中筛选出目标Issue对应的PR。这种方法效率较低,不适合大型仓库。
关键注意点
- 所有关联识别完全依赖于提交/PR描述中使用了GitHub官方支持的关键词,未使用关键词的关联无法通过API自动识别。
- 调用API时建议使用认证令牌,避免触发速率限制影响请求。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

