builtin/rebase.c: make sure the active branch isn't moved when autostashing
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: (58794775:/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: (6defce2b:/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
58794775
: rebase: implement --[no-]autostash and rebase.autostash
Signed-off-by: Ben Wijen <ben@wijen.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5fa0f5238b
commit
d2172ef02d
@ -1968,9 +1968,12 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
|||||||
state_dir_path("autostash", &options);
|
state_dir_path("autostash", &options);
|
||||||
struct child_process stash = CHILD_PROCESS_INIT;
|
struct child_process stash = CHILD_PROCESS_INIT;
|
||||||
struct object_id oid;
|
struct object_id oid;
|
||||||
struct commit *head =
|
struct object_id head_oid;
|
||||||
lookup_commit_reference(the_repository,
|
struct commit *head;
|
||||||
&options.orig_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,
|
argv_array_pushl(&stash.args,
|
||||||
"stash", "create", "autostash", NULL);
|
"stash", "create", "autostash", NULL);
|
||||||
|
@ -306,4 +306,12 @@ test_expect_success 'branch is left alone when possible' '
|
|||||||
test unchanged-branch = "$(git rev-parse --abbrev-ref HEAD)"
|
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
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user