62 lines
2.5 KiB
Text
62 lines
2.5 KiB
Text
|
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[]
|