「git diffコマンドで比較する時のダブルドット(..)とトリプルドット(...)の違いとは?」という質問へのMark Longair氏の回答
git diffコマンドは通常(「通常」というのは、例えばマージコンフリクトを解消する際などには3ウェイマージを表示することがあるため)、コミットグラフにおける完全な2つのポイント間のツリーの状態の違いを表示します。git diffでの..と...の表記は、以下の意味になります。

言い換えると、git diff foo..barはgit diff foo barと完全に同じです。どちらも2つのブランチfooとbarの最新の変更同士の違いを表示します。一方で、git diff foo...barは、2つのブランチの「マージベース」とbarの最新の変更との違いを表示します。「マージベース」とは通常、2つのブランチ間で共通な最後のコミットのことです。つまりこのコマンドは、barが始まった時のからの変更を表示し、その間にfooに対して行われた変更はまったく表示しない、ということです。
これがgit diffの..と...表記に関して知るべきすべてのことです。しかし...
よくある混乱の元として、..と...は、1つ以上の引数としてコミットの集合を取るgit logのようなコマンドでは微妙に違う意味になるということがあります(これらのコマンドはどれも引数のコミットの一覧をパースするのにgit rev-listコマンドを使っています)。
git logにおける..と...は、以下の図のように表せます。

つまりgit rev-list foo..barは、ブランチbarにあってブランチfooにないものすべてを表示します。一方で、git rev-list foo...barは、fooとbar両方に存在するコミットすべてを表示します。3つ目の図は、2つのブランチを並べて書いた時、どちらかあるいは両方のブランチに存在するコミットが表示されることを示しています。
というわけで、色々と混乱しがちなのが分かります。いずれにしても、コミットの図は理解の手助けになるでしょう :)
