在已经合并的情况下获取合并 PR 的结果

Get result of merging a PR while it is already merged

对于编号为 1 GitHub 的 PR,自动创建一个 ref refs/pulls/1/headrefs/pulls/1/merge。后者包含合并的结果,尤其适用于例如CI(因为你要测试的其实是合并后的结果)

合并 PR 后,refs/pulls/<number>/merge 不再可用(我想是因为 PR 不再可合并)。目前我想 运行 对前一段时间合并的版本进行测试。是否有一种简单的方法来访问合并的 PR 的结果,只给出 PR 编号?

即使您应该知道可能有多个 "children" 提交(其他人可以基于 PR 并稍后将其再次合并到 master 中),以下内容应该可以解决问题:

$ git rev-list -n1 upstream/pull/<number>..upstream/master

这是通过让第一个提交从 upstream/pull/<number> 走到 upstream/master 来实现的。幸运的是 github 在 PR 的最后一次提交时离开 upstream/pull/<number>

这是 https://github.com/RDFLib/rdflib 的示例:

它的当前历史是这样的:

* 371263f - (upstream/pull/486) Removed debugging print statement
...
*   fe3fa52 - (upstream/master, upstream/HEAD) Merge pull request #482
|\
| * 354c352 - (upstream/pull/482) fix broken example
|/
*   f81e0b2 - Merge pull request #480
....

这里是一些测试输出:

$ git rev-list -n1 upstream/pull/482..upstream/master
fe3fa522b48e787fa87dc1156e1a10bd6671b62c
$ git rev-list -n1 upstream/pull/486..upstream/master
(no output)