Skip to content

Commit

Permalink
builtin/rebase.c: make sure the active branch isn't moved when autost…
Browse files Browse the repository at this point in the history
…ashing

Consider the following scenario:
    git checkout not-the-master
    work work work
    git rebase --autostash upstream master

Here 'rebase --autostash <upstream> <branch>' incorrectly moves the
active branch (not-the-master) to master (before the rebase).

The expected behavior: (5879477:/git-rebase.sh:526)
    AUTOSTASH=$(git stash create autostash)
    git reset --hard
    git checkout master
    git rebase upstream
    git stash apply $AUTOSTASH

The actual behavior: (6defce2:/builtin/rebase.c:1062)
    AUTOSTASH=$(git stash create autostash)
    git reset --hard master
    git checkout master
    git rebase upstream
    git stash apply $AUTOSTASH

This commit reinstates the 'legacy script' behavior as introduced with
5879477: rebase: implement --[no-]autostash and rebase.autostash

Signed-off-by: Ben Wijen <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
bwijen authored and gitster committed Sep 7, 2019
1 parent 5fa0f52 commit d2172ef
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
9 changes: 6 additions & 3 deletions builtin/rebase.c
Original file line number Diff line number Diff line change
Expand Up @@ -1968,9 +1968,12 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
state_dir_path("autostash", &options);
struct child_process stash = CHILD_PROCESS_INIT;
struct object_id oid;
struct commit *head =
lookup_commit_reference(the_repository,
&options.orig_head);
struct object_id head_oid;
struct commit *head;

if (get_oid("HEAD", &head_oid))
die(_("could not determine HEAD revision"));
head = lookup_commit_reference(the_repository, &head_oid);

argv_array_pushl(&stash.args,
"stash", "create", "autostash", NULL);
Expand Down
8 changes: 8 additions & 0 deletions t/t3420-rebase-autostash.sh
Original file line number Diff line number Diff line change
Expand Up @@ -306,4 +306,12 @@ test_expect_success 'branch is left alone when possible' '
test unchanged-branch = "$(git rev-parse --abbrev-ref HEAD)"
'

test_expect_success 'never change active branch' '
git checkout -b not-the-feature-branch unrelated-onto-branch &&
test_when_finished "git reset --hard && git checkout master" &&
echo changed >file0 &&
git rebase --autostash not-the-feature-branch feature-branch &&
test_cmp_rev not-the-feature-branch unrelated-onto-branch
'

test_done

0 comments on commit d2172ef

Please sign in to comment.