使用Github API从Pull Request编号获取Pull Request合并提交SHA。

13

我试图使用Github API(通过githubot https://github.com/iangreenleaf/githubot)通过拉取请求号获取合并提交SHA。

我能够获得正确的响应(例如在“获取单个拉取请求”下),https://developer.github.com/v3/pulls/但merge_commit_sha给了我这个错误:

fatal: bad object 304fc816f33f808080c9c87895eea2d66081d373
当我在 GitHub 上比较这两个页面时,我看到了来自提交页面的合并提交 sha 和来自拉取请求合并页面的不同提交 sha。两个父级都相同,但合并提交是不同的。从 API 调用返回的那个无法使用,但另一个可以让我通过还原拉取请求提交来撤销它。
git revert -m 1 commit_sha

以下是一些示例屏幕截图 输入图片描述 输入图片描述

这引发了我的两个问题: - 这两个提交 sha 的区别是什么,为什么只有一个用于还原拉取请求?

  • 如何使用 GitHub API 获取合并拉取请求的提交 sha?

谢谢。

2个回答

10

GitHub已经弃用merge_commit_sha属性,因为它很容易让人感到困惑。正如他们在这里所描述的:

 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分支。为避免未来停用的问题,您可以获取上述合并分支的head提交,而不是使用merge_commit_sha
顺便提一下,如果您正在使用Hubot构建某些东西,您可能想查看这本书(不要介意我自己推销)。其中包括有关GitHub集成的章节。

2
截至2017年,“merge_commit_sha”仍然存在,文档中未被弃用,并且(据我所见)始终有效。因此,这个答案可能已经不再正确。(https://developer.github.com/v3/pulls/#get-a-single-pull-request) - mezis

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接