git diff master..lab
它会在两个分支的尖端之间产生差异。
git diff master...lab # notice triple dot
它将从两个分支的共同祖先开始产生差异。
我无法想到双点的结果与三点的结果不同的任何情况。
答案 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
。这将告诉我们E
和G
之间的直接差异 - 即我们会看到F
,G
和D
的反向补丁的组合和E
。
另一方面,git diff master...lab
相当于git diff C G
- 它显示了从两者的共同祖先(主和实验室的合并基础)开始的第二次提交(实验室)的更改,C
)。我们看到的差异将是F
和G
的组合。它不包括D
和E
。
三点符号的用例是当您想要查看您在主题分支(实验室)上已完成但尚未合并到主分部的所有工作时。你不关心在大师身上做了什么 - 你只对你在主题分支上所做的工作感兴趣。