Example history: ================ A - B - C - D - E - F - G - H master \ \ I - J - K - L feature NOTE: The meaning changes based on what git subcommand you run. log, rev-list, cherry-pick, ... =============================== These usages of dots resolve to a *set* of commits: feature..master = E F G H master..feature = I J K L master...feature = feature...master = E F G H I J K L git diff specifically: ====================== git diff produces a comparison between two commits so these usages always resolve to *two* commits: master..feature = master feature = H L master...feature = $(git merge-base feature master) feature = D L feature...master = $(git merge-base master feature) master = D H For example: 'git diff feature...master' is the same as 'git diff D H'.