2010-03-29 53 views

回答

13

我知道你已经看到了这一点,但这里的是从文档两个片段:

git diff [--options] <commit>..<commit> [--] [<path>...]

这是同义以前的形式。 (git diff [--options] <commit> <commit> [--] [<path>...]

git diff [--options] <commit>...<commit> [--] [<path>...]

这种形式是,以查看在包含分支和向上改变到第二,起始于两者的共同祖先。 git diff A...B相当于git diff $(git-merge-base A B) B

我可以看到这可能会混淆你 - .....符号为git的差异并不意味着同样的事情,因为他们修订列表(例如,用于git的日志)做的。

因此,假设我们的历史是这样的:

A - B - C - D - E (master) 
     \ 
      F - G (lab) 

的第一个片段告诉我们,git diff master..lab相当于git diff master lab,换句话说git diff E G。这将告诉我们EG之间的直接差异 - 即我们将看到F,G的组合和DE的反向补丁的组合。

在另一方面,git diff master...lab相当于git diff C G - 它显示了改变到第二提交(实验室)来自两个(主设备和实验室合并的基础上,这是C)的共同祖先开始。我们看到的差异将是FG组合。它不包括DE

的应用案例三重点符号是,当你想看到所有您在自己的特性分支(实验室)来完成,这不是合并到主还没有工作。你不在乎主人还做了什么 - 你只关心你在主题分支上做的工作。

+1

精彩。很好地解释。谢谢 – 2010-03-29 18:15:23