Re: rebase vs rebase -i
Junio C Hamano <gitster@pobox.com> writes:
> And no, "format-patch --stdout | am -3" pipe in the normal rebase codepath
> will stay unless you can produce a benchmark that says the performance of
> merge machinery is good enough these days. Back when "rebase -m" was
> introduced, it wasn't.
Just for fun, I pulled from the kernel tree. Its tip is at fc76be4 (Merge master.kernel.org:/home/rmk/linux-2.6-arm, 2010-02-04), which is a merge of a subsystem tree into the mainline.
I tried to rebase HEAD^2 (i.e. subsystem change) on top of HEAD^1 (the state Linus merged that subsystem change into). Either way, the experiment is to linearlize a side branch that has 16 patches:
The experiment is to take a history of this shape:
--A-...--N--O--P master^2 = test (subsystem tip)
\
---X--Y master
master^1and turn it into a history of this shape:
--A-...--N--O--P master^2 = test (subsystem tip)
\
---X--Y master
\
A'-B'-...O'-P' (rebased tip)The tree at rebased tip P' must match the merge Y, of course.
First, to prepare:
$ git checkout -b test master^2 ;# at the tip of subsystem
$ git checkout HEAD^0 ;# detach so that I can easily repeatBest of 5 runs on my box are:
$ git reset --hard test && time git rebase master^1
real 0m3.060s
user 0m1.976s
sys 0m0.812svs
$ git reset --hard test && time git -m rebase master^1
real 0m19.060s
user 0m15.025s
sys 0m3.564sThe numbers are understandable; the series touches only 12 paths among 31.5k paths, so applying patches has to be faster.
I have a plan to make a merge go faster by using a yet another merge strategy, but that has been backburnered for now.