rebase -i: learn to rebase root commit
authorThomas Rast <trast@student.ethz.ch>
Fri, 2 Jan 2009 22:28:28 +0000 (23:28 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 12 Jan 2009 07:04:45 +0000 (23:04 -0800)
commitd911d1465d134cbd126e531a544f33b13f4e855a
tree44772e95f9dd5f74b7b930e3ea360b7158aa9fa9
parent190f53232d1e92a57843df90e889bcfea39620d3
rebase -i: learn to rebase root commit

Teach git-rebase -i a new option --root, which instructs it to rebase
the entire history leading up to <branch>.  This is mainly for
symmetry with ordinary git-rebase; it cannot be used to edit the root
commit in-place (it requires --onto <newbase>).  Commits that already
exist in <newbase> are skipped.

In the normal mode of operation, this is fairly straightforward.  We
run cherry-pick in a loop, and cherry-pick has supported picking the
root commit since f95ebf7 (Allow cherry-picking root commits,
2008-07-04).

In --preserve-merges mode, we track the mapping from old to rewritten
commits and use it to update the parent list of each commit.  In this
case, we define 'rebase -i -p --root --onto $onto $branch' to rewrite
the parent list of all root commit(s) on $branch to contain $onto
instead.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh
t/t3412-rebase-root.sh