| List commits that are reachable by following the `parent` links from the | 
 | given commit(s), but exclude commits that are reachable from the one(s) | 
 | given with a '{caret}' in front of them.  The output is given in reverse | 
 | chronological order by default. | 
 |  | 
 | You can think of this as a set operation. Commits reachable from any of | 
 | the commits given on the command line form a set, and then commits reachable | 
 | from any of the ones given with '{caret}' in front are subtracted from that | 
 | set.  The remaining commits are what comes out in the command's output. | 
 | Various other options and paths parameters can be used to further limit the | 
 | result. | 
 |  | 
 | Thus, the following command: | 
 |  | 
 | ifdef::git-rev-list[] | 
 | ----------------------------------------------------------------------- | 
 | $ git rev-list foo bar ^baz | 
 | ----------------------------------------------------------------------- | 
 | endif::git-rev-list[] | 
 | ifdef::git-log[] | 
 | ----------------------------------------------------------------------- | 
 | $ git log foo bar ^baz | 
 | ----------------------------------------------------------------------- | 
 | endif::git-log[] | 
 |  | 
 | means "list all the commits which are reachable from 'foo' or 'bar', but | 
 | not from 'baz'". | 
 |  | 
 | A special notation "'<commit1>'..'<commit2>'" can be used as a | 
 | short-hand for "^'<commit1>' '<commit2>'". For example, either of | 
 | the following may be used interchangeably: | 
 |  | 
 | ifdef::git-rev-list[] | 
 | ----------------------------------------------------------------------- | 
 | $ git rev-list origin..HEAD | 
 | $ git rev-list HEAD ^origin | 
 | ----------------------------------------------------------------------- | 
 | endif::git-rev-list[] | 
 | ifdef::git-log[] | 
 | ----------------------------------------------------------------------- | 
 | $ git log origin..HEAD | 
 | $ git log HEAD ^origin | 
 | ----------------------------------------------------------------------- | 
 | endif::git-log[] | 
 |  | 
 | Another special notation is "'<commit1>'...'<commit2>'" which is useful | 
 | for merges.  The resulting set of commits is the symmetric difference | 
 | between the two operands.  The following two commands are equivalent: | 
 |  | 
 | ifdef::git-rev-list[] | 
 | ----------------------------------------------------------------------- | 
 | $ git rev-list A B --not $(git merge-base --all A B) | 
 | $ git rev-list A...B | 
 | ----------------------------------------------------------------------- | 
 | endif::git-rev-list[] | 
 | ifdef::git-log[] | 
 | ----------------------------------------------------------------------- | 
 | $ git log A B --not $(git merge-base --all A B) | 
 | $ git log A...B | 
 | ----------------------------------------------------------------------- | 
 | endif::git-log[] |