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 git-log-dots
for the explanation of git log
and dots. See git-diff-dots
for the git diff
explanation.
See git log and git diff for an alterative explanation.
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
.