无法想到git diff master..lab和git diff master ... lab的情况会有所不同

时间:2010-03-29 15:16:49

标签: git

git diff master..lab 

它会在两个分支的尖端之间产生差异。

git diff master...lab # notice triple dot

它将从两个分支的共同祖先开始产生差异。

我无法想到双点的结果与三点的结果不同的任何情况。

1 个答案:

答案 0 :(得分: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 diff的.....符号与修订列表的含义不同(例如git log)。

所以假设我们的历史是这样的:

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

第一个代码段告诉我们git diff master..lab相当于git diff master lab,换言之git diff E G。这将告诉我们EG之间的直接差异 - 即我们会看到FGD的反向补丁的组合和E

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

三点符号的用例是当您想要查看您在主题分支(实验室)上已完成但尚未合并到主分部的所有工作时。你不关心在大师身上做了什么 - 你只对你在主题分支上所做的工作感兴趣。