使用 github api 从拉取请求编号获取拉取请求合并提交 sha
Posted
技术标签:
【中文标题】使用 github api 从拉取请求编号获取拉取请求合并提交 sha【英文标题】:GET pull request merge commit sha from pull request number using github api 【发布时间】:2014-04-15 09:46:20 【问题描述】:我正在尝试使用 github api(通过 githubot https://github.com/iangreenleaf/githubot)从拉取请求编号中获取拉取请求合并提交 sha。
我能够得到正确的响应(此处“获取单个拉取请求”下的示例:https://developer.github.com/v3/pulls/)但 merge_commit_sha 给了我这个错误:
fatal: bad object 304fc816f33f808080c9c87895eea2d66081d373
当我比较 github 上的 2 个页面时,我在提交页面中都看到了 merge_commit_sha,但在拉取请求合并页面中看到了不同的提交 sha。两个父级相同,但合并提交不同。从 api 调用返回的一个不起作用,但另一个让我通过
恢复拉取请求提交git revert -m 1 commit_sha
以下是一些示例屏幕截图
所以这让我想到了 2 个问题: - 这两个提交 sha 有什么区别,为什么只有一个可以恢复拉取请求?
如何使用 github api 获取合并拉取请求提交 sha?谢谢。
【问题讨论】:
【参考方案1】:GitHub 具有 deprecated 和 merge_commit_sha
属性,因为它令人困惑。正如他们所描述的here:
The merge_commit_sha attribute holds the SHA of the test merge commit
这意味着 GitHub 创建了一个特殊的分支,他们将主分支和您的拉取请求分支合并,merge_commit_sha
指向该代理合并提交,但是您的本地存储库中没有它。您必须获取特殊的 pull/<pull_request_id>/merge
分支才能看到该提交。
好消息是您可以在合并拉取请求之前这样做。像Jenkins GitHub pull request builder 这样的工具利用了这种技术。同时commit_sha
是实际的合并提交,这就是您能够恢复它的原因。
所以,如果仍然不清楚,merge_commit_sha
确实 会为您提供正确的提交 sha,但要使用它,您必须先获取 pull/<pull_request_id>/merge
分支。为了避免将来弃用的问题,您可以获取上述合并分支的头部提交,而不是使用merge_commit_sha
。
顺便说一句,如果您正在使用 Hubot 构建某些东西,您可能需要查看 this book(无耻插件)。它包括一个关于 GitHub 集成的章节。
【讨论】:
截至 2017 年,merge_commit_sha
仍然存在,未在文档中弃用,并且(据我所知)始终有效。所以这个答案可能不再正确。 (developer.github.com/v3/pulls/#get-a-single-pull-request)【参考方案2】:
您可以获取拉取请求的事件列表,然后找到“合并”事件:
http://developer.github.com/v3/issues/events/#events-1
该事件的 commit_id
属性将保存合并提交的 sha。
【讨论】:
以上是关于使用 github api 从拉取请求编号获取拉取请求合并提交 sha的主要内容,如果未能解决你的问题,请参考以下文章