由于我已经创建了这些图像,我认为可能值得在另一个答案中使用它们,尽管..(dot-dot) 和(dot-dot-dot) 之间差异的描述与manojlds 的答案...基本相同。
该命令git diff通常¹仅向您显示提交图中恰好两个点之间的树状态之间的差异。中的..和...符号git diff具有以下含义:
# Left side in the illustration below:
git diff foo..bar
git diff foo bar # same thing as above
# Right side in the illustration below:
git diff foo...bar
git diff $(git merge-base foo bar) bar # same thing as above

换句话说,与 ;git diff foo..bar完全相同git diff foo bar。两者都会向您展示两个分支的尖端之间的差异foo和bar。另一方面,git diff foo...bar将向您展示两个分支的“合并基础”与bar. “合并基础”通常是这两个分支之间共同的最后一次提交,因此该命令将向您显示您的工作bar引入的更改,同时忽略同时完成的所有内容foo。
这就是你需要知道的关于..和中的...符号的全部内容git diff。然而...
......这里的一个常见混淆来源是,..当...在命令中使用时意味着微妙的不同事物,例如git log期望一组提交作为一个或多个参数。(这些命令最终都git rev-list用于从它们的参数中解析提交列表。)
..和...for的含义git log可以用图形表示如下:

因此,git rev-list foo..bar向您显示 branchbar上不在 branch 上的所有内容foo。另一方面,向您显示其中一个或git rev-list foo...bar中的所有提交,但不是两个。第三张图只是显示,如果您列出两个分支,您将获得其中一个或两个分支中的提交。foo bar
好吧,无论如何,我觉得这有点令人困惑,而且我认为提交图有帮助:)
¹我只说“通常”,因为例如,在解决合并冲突时,git diff会向您展示三向合并。