Code

rebase--interactive: don't require what's rebased to be a branch
authorDave Olszewski <cxreg@pobox.com>
Mon, 15 Mar 2010 04:48:22 +0000 (21:48 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Mar 2010 06:08:09 +0000 (23:08 -0700)
git rebase allows you to specify a non-branch commit-ish as the "branch"
argument, which leaves HEAD detached when it's finished.  This is
occasionally useful, and this patch brings the same functionality to git
rebase --interactive.

Signed-off-by: Dave Olszewski <cxreg@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-rebase--interactive.sh
t/t3404-rebase-interactive.sh

index 3e4fd1456f1ebb4aabb61de6d7f13f820ae2abdc..d047dcb3e4c4eddfc48738dcad7397af1e16be57 100755 (executable)
@@ -783,8 +783,6 @@ first and then run 'git rebase --continue' again."
 
                if test ! -z "$1"
                then
-                       output git show-ref --verify --quiet "refs/heads/$1" ||
-                               die "Invalid branchname: $1"
                        output git checkout "$1" ||
                                die "Could not checkout $1"
                fi
index 4e3513709eb121769f87501c1862c996184a6d05..05708c2462b1b2d90113553065bbbe3dad53cc9c 100755 (executable)
@@ -553,4 +553,13 @@ test_expect_success 'reword' '
        git show HEAD~2 | grep "C changed"
 '
 
+test_expect_success 'rebase while detaching HEAD' '
+       git symbolic-ref HEAD &&
+       grandparent=$(git rev-parse HEAD~2) &&
+       test_tick &&
+       FAKE_LINES="2 1" git rebase -i HEAD~2 HEAD^0 &&
+       test $grandparent = $(git rev-parse HEAD~2) &&
+       test_must_fail git symbolic-ref HEAD
+'
+
 test_done