Merge branch 'bw/rebase-autostash-keep-current-branch'

"git rebase --autostash <upstream> <branch>", when <branch> is
different from the current branch, incorrectly moved the tip of the
current branch, which has been corrected.

* bw/rebase-autostash-keep-current-branch:
  builtin/rebase.c: Remove pointless message
  builtin/rebase.c: make sure the active branch isn't moved when autostashing
This commit is contained in:
Junio C Hamano 2019-09-30 13:19:32 +09:00
commit 974bdb0205
2 changed files with 9 additions and 16 deletions

View file

@ -2002,9 +2002,6 @@ 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 =
lookup_commit_reference(the_repository,
&options.orig_head);
argv_array_pushl(&stash.args, argv_array_pushl(&stash.args,
"stash", "create", "autostash", NULL); "stash", "create", "autostash", NULL);
@ -2025,17 +2022,9 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
options.state_dir); options.state_dir);
write_file(autostash, "%s", oid_to_hex(&oid)); write_file(autostash, "%s", oid_to_hex(&oid));
printf(_("Created autostash: %s\n"), buf.buf); printf(_("Created autostash: %s\n"), buf.buf);
if (reset_head(&head->object.oid, "reset --hard", if (reset_head(NULL, "reset --hard",
NULL, RESET_HEAD_HARD, NULL, NULL) < 0) NULL, RESET_HEAD_HARD, NULL, NULL) < 0)
die(_("could not reset --hard")); die(_("could not reset --hard"));
printf(_("HEAD is now at %s"),
find_unique_abbrev(&head->object.oid,
DEFAULT_ABBREV));
strbuf_reset(&buf);
pp_commit_easy(CMIT_FMT_ONELINE, head, &buf);
if (buf.len > 0)
printf(" %s", buf.buf);
putchar('\n');
if (discard_index(the_repository->index) < 0 || if (discard_index(the_repository->index) < 0 ||
repo_read_index(the_repository) < 0) repo_read_index(the_repository) < 0)

View file

@ -37,7 +37,6 @@ test_expect_success setup '
create_expected_success_am () { create_expected_success_am () {
cat >expected <<-EOF cat >expected <<-EOF
$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual) $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
HEAD is now at $(git rev-parse --short feature-branch) third commit
First, rewinding head to replay your work on top of it... First, rewinding head to replay your work on top of it...
Applying: second commit Applying: second commit
Applying: third commit Applying: third commit
@ -48,7 +47,6 @@ create_expected_success_am () {
create_expected_success_interactive () { create_expected_success_interactive () {
q_to_cr >expected <<-EOF q_to_cr >expected <<-EOF
$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual) $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
HEAD is now at $(git rev-parse --short feature-branch) third commit
Applied autostash. Applied autostash.
Successfully rebased and updated refs/heads/rebased-feature-branch. Successfully rebased and updated refs/heads/rebased-feature-branch.
EOF EOF
@ -57,7 +55,6 @@ create_expected_success_interactive () {
create_expected_failure_am () { create_expected_failure_am () {
cat >expected <<-EOF cat >expected <<-EOF
$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual) $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
HEAD is now at $(git rev-parse --short feature-branch) third commit
First, rewinding head to replay your work on top of it... First, rewinding head to replay your work on top of it...
Applying: second commit Applying: second commit
Applying: third commit Applying: third commit
@ -70,7 +67,6 @@ create_expected_failure_am () {
create_expected_failure_interactive () { create_expected_failure_interactive () {
cat >expected <<-EOF cat >expected <<-EOF
$(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual) $(grep "^Created autostash: [0-9a-f][0-9a-f]*\$" actual)
HEAD is now at $(git rev-parse --short feature-branch) third commit
Applying autostash resulted in conflicts. Applying autostash resulted in conflicts.
Your changes are safe in the stash. Your changes are safe in the stash.
You can run "git stash pop" or "git stash drop" at any time. You can run "git stash pop" or "git stash drop" at any time.
@ -306,4 +302,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