git-rev-list: allow arbitrary head selections, use git-rev-tree syntax
commit337cb3fb8da45f10fe9a0c3cf571600f55ead2ce
authorLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 4 Jun 2005 21:38:28 +0000 (4 14:38 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 4 Jun 2005 21:38:28 +0000 (4 14:38 -0700)
treea0b72bf6b71119b47b65072ef45592f69749a07d
parentdba385bb3ed541c4d18e2b8080960eee358394fa
git-rev-list: allow arbitrary head selections, use git-rev-tree syntax

This makes git-rev-list use the same command line syntax to mark the
commits as git-rev-tree does, and instead of just allowing a start and
end commit, it allows an arbitrary list of "interesting" and "uninteresting"
commits.

For example, imagine that you had three branches (a, b and c) that you
are interested in, but you don't want to see stuff that already exists
in another persons three releases (x, y and z). You can do

git-rev-list a b c ^x ^y ^z

(order doesn't matter, btw - feel free to put the uninteresting ones
first or otherwise swithc them around), and it will show all the
commits that are reachable from a/b/c but not reachable from x/y/z.

The old syntax "git-rev-list start end" would not be written as
"git-rev-list start ^end", or "git-rev-list ^end start".

There's no limit to the number of heads you can specify (unlike
git-rev-tree, which can handle a maximum of 16 heads).
rev-list.c