在最初创建提交的Github上查找拉取请求


171

拉取请求非常适合理解关于回购所做的更改或一组更改的更大想法。读取拉取请求是快速“增加”项目的一种好方法,因为您可以对逻辑更改进行较大的分组,而不是对源进行小的原子更改。类似于将代码中的行组织到相关的“节”中,以使其更易于阅读。

我发现自己正在查看文件或提交,并且我想知道是否有一种方法可以将提交回溯到最初创建它的“拉取请求”。该拉取请求最终将被合并,但对于合并提交则不是必需的。


1
+1如果您分叉了一个项目并且周围有一个旧的工作分支,并且您不再记得是否为此做过PR,这也很有用。
史蒂夫·克莱

Answers:


225

您可以转到github并在搜索栏中输入SHA,请确保选择左侧的“问题”链接。

2017年7月13日更新

通过Github UI,现在有了一种非常简单的方法。如果要在UI的分支中的提交列表中查看提交,请单击指向提交本身的链接。如果该提交有一个PR,并且没有直接添加到分支,则指向PR的链接(列出PR号和它进入的分支)将直接位于页面顶部的提交消息下方。 在此处输入图片说明


通过单击指向提交的链接找到PR的示例

如果您拥有提交SHA而没有其他东西,并且不想四处寻找,只需将其添加/commit/[commit SHA]到存储库URL中,您将看到带有PR链接(如果存在)的提交页面。例如,如果SHA是52797a7a3b087231e4e391e11ea861569205aaf4,并且仓库是https://github.com/glimmerjs/glimmer-vm,则转到https://github.com/glimmerjs/glimmer-vm/commit/52797a7a3b087231e4e391e11ea8615692054


我无法在短SHA这样的环境下使用它e4077951,这仍然对您有用吗?
马特·桑德斯

@RustyToms可以正常工作,但是当我像您提到的那样搜索提交哈希时,[ github.com/wso2/carbon-kernel/…它为我提供了两个Pull请求,它们都将相同的提交合并到了主数据库。在这种情况下,我们应该选择合并相关提交的Pull请求
Kasun Siyambalapitiya,2017年

@RustyToms我们如何才能通过API达到这一目标
Kasun Siyambalapitiya

1
@marathon现在有个更简单的方法,我将更新答案
RustyToms

1
如果没有提及PR,我可以得出结论,没有PR?也就是说,提交是直接在分支上进行的(通常是master)?
埃里克(Erik)'18年

53
git config --add remote.origin.fetch +refs/pull/*/head:refs/remotes/origin/pull/*
git fetch origin
git describe --all  --contains <COMMIT>

如有必要,请更改origin为指向将请求请求发送到的github存储库的远程名称。对于任何给定的遥控器,第一个命令只需要运行一次,第二个命令通常在获取其他更新时执行。

这将导致git获得有关拉取请求以及实际分支的信息。它们将显示为的远程跟踪分支origin/pull/123。一旦做到这一点,您可以使用git describe--all--contains 选项,以显示它具有引用提交第一家分店。

但是,如果您要查找的提交实际上是拉请求中提交的修改版本,例如将更改重新基于其他工作,或者执行合并的人员决定进行某些更改,则此操作将无效。


我认为这会导致下载所有拒绝PR中的提交。有没有办法让获取获取pull/*/head没有斑点的提交列表?此后如何“清理”(重新配置来源)?
史蒂夫·克莱

1
很高兴知道;我不知道GitHub会将它们作为实际的Git对象进行跟踪,但这很有意义。顺便说一句,您是说要在配置命令中使用“上游”而不是“原始”?
Tobias J

1
@TobyJ的使用upstream确实是一个错误。我从具有该配置的存储库中复制了该配置,upstream并在其中命名了远程服务器,并在将其更改为使用更通用origin的远程计算机名称时错过了这种情况。我已经编辑了答案以解决此问题。
qqx 2014年

谢谢!但这是如此复杂。我希望在Web UI上有一个指向包含请求请求的链接。
Daniel Darabos 2014年

您还可以尝试使用refs/remotes/origin/pr/*代替refs/remotes/origin/pull/*
elaichi

21

自2014年10月13日起,这应该很简单:

例如:

您可以看到该文件hakimel/reveal.js/plugin/markdown/markdown.js我的贡献现在带有对它起源的PR#734的引用。

来自contrib的PR

这来自链接来自提交的合并的合并请求

我们已经在提交页面上包含了包含分支和标签,以便为您提供有关更改的更多上下文。现在,在存储库默认分支中的提交还将向您显示引入它们的拉取请求。

提交PR参考!

在拉取请求中,您可以看到有关为什么引入提交的讨论,并且可以更清楚地了解更改的原因。

与往常一样,如果您知道提交SHA,则可以跳过提交页面并直接搜索pull请求


当我像您提到的那样搜索提交哈希时,[ github.com/wso2/carbon-kernel/…它为我提供了两个Pull请求,它们都将相同的提交合并到了master。在这种情况下,我们应该选择合并相关提交的Pull请求
Kasun Siyambalapitiya,2017年

@KasunSiyambalapitiya不确定:您可以为此提出一个新问题。我会选择最新的。
VonC

2
我们可以得到这个API水平吗?
Kasun Siyambalapitiya

@KasunSiyambalapitiya好问题。我不知道。我在developer.github.com/v3/repos/commits/#get-a-single-commit
VonC

@esp有趣。我看到了PR的列表,但没有看到它们的SHA1提交标记了它们的集成。
VonC


3

我遇到了同样的问题,并编写了pr_for_sha bash帮助器,在此处进行了记录:

http://joey.aghion.com/find-the-github-pull-request-for-a-commit/

像这样调用它pr_for_sha <COMMIT>,它将在浏览器中打开相应的github pull request页面。


2
此解决方案假定提交之后的最近合并是包含提交的合并,但不一定总是这样。
杰森·丹尼

@JasonDenney跟随您的意思是在给定的分支中还是在时间上?
LeZuse

嗯,这是前一段时间,但我想我的意思是及时。假设星期一在分支A中进行提交“ X”,星期二在分支B中进行提交并将分支B合并为master,星期三将分支A合并为master。如果您使用此脚本在PR提交“ X”所在的主分支上进行搜索,我很确定它会错误地告诉您分支B。不过请仔细检查一下。
杰森·丹尼

无法使git log命令正常工作。git log --merges --ancestry-path --oneline 66100ab0..master- fatal: ambiguous argument '66100ab0..master': unknown revision or path not in the working tree.-git version 2.25.0
詹弗兰科P.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.