Answers:
这取决于您使用的是log命令还是diff命令。在这种log情况下,它在man git-rev-parse文档中:
为了从提交中排除可到达的提交,使用前缀^表示法。例如^ r1 r2表示可从r2到达的提交,但不包括可从r1到达的提交。
这种设置操作经常出现,以至于它有一个简写形式。当您有两个提交r1和r2(根据上面的“指定版本”中所述的语法命名)时,您可以要求从r2可以访问的提交,而不是通过“ ^ r1 r2”从r1可以访问的提交,并且可以写为“ r1..r2”。
类似的符号“ r1 ... r2”被称为r1和r2的对称差,并且定义为“ r1 r2-不是$(git merge-base --all r1 r2)”。这是可从r1或r2之一访问的提交集合,但不能从两者都访问。
从根本上讲,这意味着您将获得两个分支中任何一个的所有提交,但不能同时获得这两个分支中的所有提交。
在这种diff情况下,它在man git-diff文档中:
git diff [--options] <commit>...<commit> [--] [<path>...] This form is to view the changes on the branch containing and up to the second <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B". You can omit any one of <commit>, which has the same effect as using HEAD instead.
这有点模糊。基本上,这意味着它仅显示该分支与另一个分支的不同之处:它使用您给它的第一个commitish查找最后一个公共提交,然后将第二个commitish与该差异进行比较。与该分支相比,这是一种查看该分支所做的更改的简便方法,而无需仅注意该分支的更改。
该..稍微简单:在git-diff情况下,这是相同的git diff A B,只是一个diff文件对B.在log情况下,它表明在B,而不是在A中的所有提交
..,并...精确地交换日志和DIFF:log A..B从合并基础到B的变化是什么diff A...B呢
git diff。
A...B== A..B + B..A?
git log绝对是这样
当您使用..和一样的提交范围...时git log,它们之间的区别在于,对于分支A和B,
git log A..B
将向您显示B具有A没有的所有提交,而
git log A...B
会告诉你这两个 A有B没有的提交和,以及提交该B已经是一个不具备,或者换句话说,它会过滤掉所有提交的是A和B份额,因此只显示他们不共享的提交。
这是的视觉表示git log A..B。分支范围B所包含的提交(在A中不存在)是由提交范围返回的,并在Venn图中以红色突出显示,并在提交树中以蓝色圈出:


这些是的图表git log A...B。请注意,两个分支共享的提交不会由以下命令返回:


...更有用...通过使用--left-right显示哪些提交属于哪个分支的选项,可以使三点提交范围在log命令中更加有用:
$ git log --oneline --decorate --left-right --graph master...origin/master
< 1794bee (HEAD, master) Derp some more
> 6e6ce69 (origin/master, origin/HEAD) Add hello.txt
在上面的输出中,您将看到属于的提交以master前缀<,而属于的提交以origin/master前缀>。
有一天,我可能会添加自己的解释,说明提交范围如何使用git diff,但是现在,您可能想了解一下Git diff commit中双点“ ..”和三点“ ...”之间的区别是什么?范围?。