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

Nic*_*ilt 4 git

git diff master..lab 
Run Code Online (Sandbox Code Playgroud)

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

git diff master...lab # notice triple dot
Run Code Online (Sandbox Code Playgroud)

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

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

Cas*_*bel 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)
Run Code Online (Sandbox Code Playgroud)

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

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

三点表示法的用例是当您想要查看您在主题分支(实验室)上尚未合并到主数据库中的所有工作时.你不关心在大师身上做了什么 - 你只对你在主题分支上所做的工作感兴趣.