git-rev-list [ --max-count=number ]
[ --max-age=timestamp ]
[ --min-age=timestamp ]
[ --sparse ]
[ --no-merges ]
[ --remove-empty ]
[ --not ]
[ --all ]
[ --stdin ]
[ --topo-order ]
[ --parents ]
[ --(author|committer|grep)=<pattern> ]
[ [--objects | --objects-edge] [ --unpacked ] ]
[ --pretty | --header ]
[ --bisect ]
[ --merge ]
<commit> [ -- <paths> ]
Commits which are stated with a preceding ^ cause listing to stop at that point. Their parents are implied. Thus the following command:
$ git-rev-list foo bar ^bazmeans "list all the commits which are included in foo and bar, but not in 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:
$ git-rev-list origin..HEAD
$ git-rev-list HEAD ^origin
Another special notation is
"<commit1>\fI<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:
$ git-rev-list A B --not $(git-merge-base --all A B)
$ git-rev-list A...B
git-rev-list(1)
is a very essential git program, since it provides the ability to
build and traverse commit ancestry graphs. For this reason, it has
a lot of different options that enables it to be used by commands
as different as git-bisect(1)
and git-repack(1).