Code

Fix rebase -p --onto
authorGreg Price <price@ksplice.com>
Wed, 22 Jul 2009 16:38:58 +0000 (12:38 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 22 Jul 2009 18:15:06 +0000 (11:15 -0700)
commit1830d9cb62772c0626297e4bb6e537664283ebfa
tree0462ae20652b3b630b70eadb9eba9b3c0cfd0999
parent78d3b06e0f5e6aaea001ee8e3e7c8e401dc4b244
Fix rebase -p --onto

In a rebase with --onto, the correct test for whether we can skip
rewriting a commit is if it is already on top of $ONTO, not $UPSTREAM.
Without --onto, this distinction does not exist and the behavior does
not change.

In a situation with two merged branches on a common base X:

 X---o---o---o---M
  \             /
   x---x---x---x

 Y

if we try to move the branches from their base on X to be based on Y,
so as to get

 X

 Y---o'--o'--o'--M'
  \             /
   x'--x'--x'--x'

then we fail.  The command `git rebase -p --onto Y X M` moves only the
first-parent chain, like so:

 X
  \
   x---x---x---x
                \
 Y---o'--o'--o'--M'

because it mistakenly drops the other branch(es) x---x---x---x from
the TODO file.  This tests and fixes this behavior.

Signed-off-by: Greg Price <price@ksplice.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh
t/t3414-rebase-preserve-onto.sh [new file with mode: 0755]