Pain in the dots

git uses a two and three dot notation for git log and git diff.

Unfortunately they mean different, and nearly opposite things, in the two cases.

See Two and three dots with log for the explanation of git log and dots. See Two and three dots with diff for the git diff explanation.

See git log and git diff for an alterative explanation.

The dot difference

This is a summary. You need the pages above to get the full picture.

Imagine this history:

      A---B---C topic
     /
D---E---F---G master

Obviously A, B, C is the stuff unique to topic, and F, G is the stuff unique to master.

log and two dots gives you the stuff unique to the second named branch. So:

git log master..topic

will show you a log of commits C, B, A.

log and three dots shows you the stuff unique to the second named branch AND the stuff unique to the first named branch, so:

git log master...topic

shows you C, B, A and F, G.

diff on the other hand, means something different. So diff and two dots:

git diff master..topic

shows you all stuff that differs between the state as of master and the state as of topic. It will show you the difference between the effect of A, B, C and the effect of F, G. You can think of this as being the difference between the stuff unique to topic and the stuff unique to master.

diff and three dots:

git diff master...topic

shows you the stuff that differs between topic and the last common ancestor of (topic, master). In this example that ancestor is commit E. Thus three dots for diff is the difference caused by the stuff unique to topic.