From: Stephen Haberman Date: Wed, 15 Oct 2008 07:44:40 +0000 (-0500) Subject: rebase-i-p: if todo was reordered use HEAD as the rewritten parent X-Git-Tag: v1.6.1-rc1~95^2~2 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=80fe82e4eb365773ba6518c4539c9235ea9a8b2e;p=git.git rebase-i-p: if todo was reordered use HEAD as the rewritten parent This seems like the best guess we can make until git sequencer marks are available. That being said, within the context of re-ordering a commit before its parent in todo, I think applying it on top of the current commit seems like a reasonable assumption of what the user intended. Signed-off-by: Stephen Haberman Signed-off-by: Junio C Hamano --- diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 495f554b6..848fbe7d5 100755 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -194,6 +194,15 @@ pick_one_preserving_merges () { if test -f "$REWRITTEN"/$p then new_p=$(cat "$REWRITTEN"/$p) + + # If the todo reordered commits, and our parent is marked for + # rewriting, but hasn't been gotten to yet, assume the user meant to + # drop it on top of the current HEAD + if test -z "$new_p" + then + new_p=$(git rev-parse HEAD) + fi + test $p != $new_p && fast_forward=f case "$new_parents" in *$new_p*) diff --git a/t/t3411-rebase-preserve-around-merges.sh b/t/t3411-rebase-preserve-around-merges.sh old mode 100755 new mode 100644 index f9c549b3b..aacfaae84 --- a/t/t3411-rebase-preserve-around-merges.sh +++ b/t/t3411-rebase-preserve-around-merges.sh @@ -80,7 +80,7 @@ test_expect_success 'setup' ' # \ / # -- C1 -- # -test_expect_failure 'squash F1 into D1' ' +test_expect_success 'squash F1 into D1' ' FAKE_LINES="1 squash 3 2" git rebase -i -p B1 && test "$(git rev-parse HEAD^2)" = "$(git rev-parse branch)" && test "$(git rev-parse HEAD~2)" = "$(git rev-parse B1)" && @@ -99,7 +99,7 @@ test_expect_failure 'squash F1 into D1' ' # # And rebase G1..M1 onto E2 -test_expect_failure 'rebase two levels of merge' ' +test_expect_success 'rebase two levels of merge' ' git checkout -b branch2 A1 && touch g && git add g &&