使用github api从请求请求编号获取合并请求合并提交sha

问题描述 投票:6回答:2

我正在尝试使用github api(通过githubot https://github.com/iangreenleaf/githubot)从拉取请求编号中获取拉取请求合并提交sha。

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

fatal: bad object 304fc816f33f808080c9c87895eea2d66081d373

[当我在github上比较两个页面时,我在提交页面上看到了merge_commit_sha,但是在拉请求合并页面上看到了一个不同的提交。父母双方相同,但合并提交不同。从api调用返回的一个无效,但另一个让我通过[

还原请求请求的提交
git revert -m 1 commit_sha

以下是一些示例屏幕截图“在此处输入图像描述”“在此处输入图像描述”

因此,这引出了两个问题:-这2个提交sha的区别是什么?为什么只有一个工作才能还原拉取请求?

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

谢谢。

git github-api git-revert hubot
2个回答
3
投票

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

 The merge_commit_sha attribute holds the SHA of the test merge commit

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

好是,您可以之前合并拉取请求。诸如Jenkins GitHub pull request builder之类的工具也利用了这一技术。同时commit_sha是实际的合并提交,这就是您能够还原它的原因。

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

顺便说一句,如果您要用Hubot进行构建,则可能要签出this book(无耻的插件)。它包括有关GitHub集成的一章。


4
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.