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

Bra*_*rks 32 git github git-diff

当我在另一个分支之间进行Github比较视图时,Github似乎将HEAD版本与较旧的非头版本进行比较.masterAAmaster

我调查了一下,从我能说的话来看,听起来像Github正在将分支A与一个共同的祖先进行比较master.实际上并没有将它与目前HEAD掌握的那些进行比较.

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

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

编辑:这是一个示例回购,显示问题

https://github.com/bradparks/test_github_diff_view

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

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

    我看到以下意外结果.为什么不反对v300而不是v100

    在此输入图像描述

Von*_*onC 25

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

2018年9月:是的:GitHub现在明确支持" 三点和双点Git diff比较 ".在这里查看示例.
keisuke 在评论中提到Bitbucket类似举措.

2015年原始答案:

否:如" 当前版本的分支的GitHub比较视图 "中所述,GitHub仅支持三点(...)范围快捷方式规范.
那是:

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

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

官员GitHub的帮助提到这个功能为:

Compare的最常见用途是比较分支,例如当您启动新的Pull请求时.

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

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

注意:即使您直接指定两个SHA1,因为它在" 比较提交 "中有明确记录,但它仍然可以执行git diff $(git-merge-base A B) B.
这将不会直接做两次提交之间的差异.

  • 我尝试了这个,效果很好.这就像我必须在实际合并之前解决所有合并冲突,至少在我的观点中;-)***但这不会使Github提供的"比较"视图几乎无用吗?***我知道他们'在某种程度上受到git的工作流程的限制,但在我看来,比较视图对99%的人来说都是非常误导的.考虑到看起来有多么糟糕,我认为如果它甚至没有这个功能,那几乎会更好. (4认同)