|  | 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[] |