两个分支的Github比较视图不正确?

时间:2015-09-14 17:49:46

标签: git github git-diff

当我在master和另一个分支A之间执行Github comparison view时,Github似乎将A的HEAD版本与较旧的非头版{ {1}}。

我调查了一下,从我能说的话来看,听起来Github正在将分支masterA的共同祖先进行比较。它实际上并没有将它与当前主人master的内容进行比较。

有没有办法在Github中将master的HEAD与分支HEAD的HEAD区分开来?

如果没有,为什么不呢?这似乎是每个开发人员都希望能够做到的功能。或者是否有一些我可能会错过的过程?我希望能够直接从其中一个差异中创建一个Pull Request。

编辑:以下是显示问题的示例回购

https://github.com/bradparks/test_github_diff_view

  • 我创建了一个新的repo,其中包含一个文件README.md
  • 我将此文件设置为包含一行A
  • 然后我将master分支到一个新分支v100,并将该行更改为“v200'
  • 然后我将master分支中的值更改为' v300',然后使用比较链接比较2个分支

    https://github.com/bradparks/test_github_diff_view/compare/A

    我看到以下意外结果。为什么它不是A而不是v300

    enter image description here

3 个答案:

答案 0 :(得分:23)

  

有没有办法在Github中将master的HEAD与分支A的HEAD区分开来?

Sept 2018:是的:GitHub现在明确支持“Three-dot and two-dot Git diff comparisons”。见an example here
keisuke提到in the comments一个similar initiative on Bitbucket

2015年原始答案:

否:如“GitHub compare view for current versions of branches”中所述,GitHub仅支持三点(...)范围快捷键规范。
那就是:

  

此表单用于查看包含和最多为第二个的分支上的更改,从两者的共同祖先开始。

     

git diff A...B”相当于“git diff $(git-merge-base A B) B”   你可以省略任何一个,它与使用HEAD具有相同的效果。

official GitHub help将此功能提及为:

  

比较最常见的用途是比较分支,例如当您开始新的Pull请求时。

在那种情况下,PR分支从master开始(或者应该在master之上重新设置),这意味着master HEAD是master和PR分支之间的基础。

但是当两个分支分叉时,比较不再在HEADs之间,而是在一个共同的祖先和一个HEAD之间:git diff $(git-merge-base master B) B

注意:即使您直接指定两个SHA1,因为它在“Comparing commits”中有明确记录,但执行git diff $(git-merge-base A B) B
那将直接在两次提交之间做差异。

答案 1 :(得分:1)

  

有没有办法将master的HEAD与分支A的HEAD区分开来   在Github?

[编辑:不,我错了。我管理了一个URL,看起来它会做正确的事情,页面上的差异看起来正确,但这是一个意外。如果您真的想了解更多信息,请查看此答案的历史记录。]

答案 2 :(得分:1)

只是另一个想法。如果你想从你的工作和主分支的头部之间的差异中创建一个拉取请求(按照op),那么你需要做的是首先从主分支grep重新定义你自己的分支。然后提出拉动请求。

但是你通常不需要这样做,Git非常聪明地使用合并,并且通常能够将你的工作添加到主分支中,就像你想要它一样,即使你没有先修改。