使用github api从拉请求号GET pull request merge commit sha

时间:2014-03-11 17:00:20

标签: git github-api git-revert hubot

我正在尝试使用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,但是我从pull请求合并页面看到了不同的提交sha。两个父级都是相同的,但合并提交是不同的。从api调用返回的那个不起作用,但另一个让我通过

恢复pull请求提交
git revert -m 1 commit_sha

以下是一些示例屏幕截图 enter image description here enter image description here

所以这引出了两个问题: - 这两个提交sha之间有什么区别?为什么只有一个提交还原拉取请求?

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

感谢。

2 个答案:

答案 0 :(得分:3)

GitHub拥有deprecated merge_commit_sha属性,因为它令人困惑。正如他们所描述的那样here

 The merge_commit_sha attribute holds the SHA of the test merge commit

这意味着GitHub创建了一个特殊的分支,它们合并了master和你的pull请求分支,而merge_commit_sha指向了代理合并提交,但是你没有在你的本地仓库中拥有它。您必须获取特殊的pr/<pull_request_id>/merge分支才能看到该提交。

好的是你可以在合并拉取请求之前执行。像Jenkins GitHub pull request builder这样的工具利用了这种技术。同时commit_sha是实际的合并提交,这就是为什么你能够还原它。

因此,如果它仍然不清楚,merge_commit_sha 会为您提供正确的提交,但要使用它,您必须首先获取pr/<pull_request_id>/merge分支。为了避免将来弃用的问题,您可以获取上述合并分支的头部提交,而不是使用merge_commit_sha

顺便说一句,如果您正在使用Hubot构建某些内容,您可能需要查看this book(无耻插件)。它包含一个关于GitHub集成的章节。

答案 1 :(得分:3)

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

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

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