9

我正在尝试使用 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 个问题: - 这 2 个提交 sha 之间有什么区别,为什么只有一个可以恢复拉取请求?

  • 如何使用 github api 获取合并拉取请求提交 sha?

谢谢。

4

2 回答 2

5

GitHub 已弃用merge_commit_sha属性,因为它令人困惑。正如他们在这里描述的:

 The merge_commit_sha attribute holds the SHA of the test merge commit

这意味着 GitHub 创建了一个特殊的分支,它们在其中合并 master 和您的 pull request 分支,并merge_commit_sha指向该代理合并提交,但是您的本地 repo 中没有它。您必须获取特殊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 构建一些东西,你可能想看看这本书(无耻的插件)。它包括一个关于 GitHub 集成的章节。

于 2014-03-12T03:35:53.793 回答
4

您可以获取拉取请求的事件列表,然后找到“合并”事件:

http://developer.github.com/v3/issues/events/#events-1

commit_id事件的属性将保存合并提交的 sha。

于 2014-03-13T12:52:00.857 回答