由于我已经创建了这些图像,因此我认为可能值得在其他答案中使用它们,尽管对..(dot-dot)和...(dot-dot-dot)之间差异的描述与manojlds的答案基本相同。
该命令git diff通常¹仅向您显示提交图中恰好两点之间树的状态之间的差异。中的..和...符号git diff具有以下含义:

换句话说,git diff foo..bar与git diff foo bar; 完全相同。两者都将告诉你两个分支的末端之间的差异foo和bar。另一方面,git diff foo...bar将显示两个分支的“合并基础”与的尖端之间的区别bar。“合并基础”通常是这两个分支之间的最后一个共同提交,因此此命令将向您显示您所做的工作bar已进行的更改,同时忽略了同时进行的所有操作foo。
您只需要了解中的..和...符号git diff。然而...
...此处常见的混乱根源是,当在命令中使用时..,它们的...意思是细微不同,例如git log期望一组提交作为一个或多个参数。(这些命令最终都git rev-list用于从其参数中解析提交列表。)
的含义..和...用于git log可以用图形表示为如下:

因此,git rev-list foo..bar向您显示分支bar上没有的所有内容foo。另一方面,git rev-list foo...bar向您显示foo 或中的 所有提交bar,但不同时包含两者。第三张图仅显示,如果您列出两个分支,则将获得其中一个或两个中的提交。
好吧,无论如何,我发现一切都令人困惑,并且我认为提交图图很有帮助:)
¹我只会说“通常”,因为例如在解决合并冲突时,git diff将显示三向合并。
..和的含义以及...中git diff的不同含义git log。