git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v6 1/2] builtin/rebase.c: make sure the active branch isn't moved when autostashing

From
Ben Wijen <ben@wijen.net>
Date
Aug 30, 2019, 15:16 UTC
Message-ID
<20190830151607.4208-2-ben@wijen.net>
In-Reply-To
<20190830151607.4208-1-ben@wijen.net>
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>
---
 builtin/rebase.c            | 8 ++++++--
 t/t3420-rebase-autostash.sh | 8 ++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 670096c065..abcbfb8f01 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1968,9 +1968,13 @@ 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 object_id head_oid;
+			if (get_oid("HEAD", &head_oid)) {
+				die(_("could not determine HEAD revision"));
+			}
+
 			struct commit *head =
-				lookup_commit_reference(the_repository,
-							&options.orig_head);
+				lookup_commit_reference(the_repository, &head_oid);
 
 			argv_array_pushl(&stash.args,
 					 "stash", "create", "autostash", NULL);
diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh
index b8f4d03467..1131e0016a 100755
--- a/t/t3420-rebase-autostash.sh
+++ b/t/t3420-rebase-autostash.sh
@@ -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
-- 
2.22.0
Previous: Ben WijenNext: Junio C Hamano
Message 23 of 38 in “git rebase: Make sure upstream branch is left alone.”
  1. 0/2 git rebase: Make sure upstream branch is left alone.Ben Wijen, Aug 18, 2019
  2. 2/2 rebase.c: make sure current branch isn't moved when autostashingBen Wijen, Aug 18, 2019
  3. Phillip WoodAug 20, 2019
  4. BenAug 20, 2019
  5. 0/1 git rebase: Make sure upstream branch is left alone.Ben Wijen, Aug 20, 2019
  6. 1/1 rebase.c: make sure current branch isn't moved when autostashingBen Wijen, Aug 20, 2019
  7. Eric SunshineAug 20, 2019
  8. Junio C HamanoAug 20, 2019
  9. 0/1 rebase.c: make sure the active branch isn't moved when autostashingBen Wijen, Aug 21, 2019
  10. 1/1 rebase.c: make sure the active branch isn't moved when autostashingBen Wijen, Aug 21, 2019
  11. Johannes SchindelinAug 22, 2019
  12. Junio C HamanoAug 22, 2019
  13. 1/1 rebase.c: make sure the active branch isn't moved when autostashingBen Wijen, Aug 26, 2019
  14. 1/1 rebase.c: make sure the active branch isn't moved when autostashingBen Wijen, Aug 26, 2019
  15. SZEDER GáborAug 26, 2019
  16. Johannes SchindelinAug 28, 2019
  17. Junio C HamanoAug 28, 2019
  18. Junio C HamanoAug 28, 2019
  19. 0/2 rebase.c: make sure current branch isn't moved when autostashingBen Wijen, Aug 29, 2019
  20. 1/2 builtin/rebase.c: make sure the active branch isn't moved when autostashingBen Wijen, Aug 29, 2019
  21. 2/2 builtin/rebase.c: Remove pointless messageBen Wijen, Aug 29, 2019
  22. 0/2 rebase.c: make sure current branch isn't moved when autostashingBen Wijen, Aug 30, 2019
  23. 1/2 builtin/rebase.c: make sure the active branch isn't moved when autostashingBen Wijen, Aug 30, 2019
  24. Junio C HamanoAug 30, 2019
  25. BenAug 31, 2019
  26. Junio C HamanoSep 1, 2019
  27. BenSep 1, 2019
  28. Junio C HamanoSep 2, 2019
  29. 2/2 builtin/rebase.c: Remove pointless messageBen Wijen, Aug 30, 2019
  30. 2/2 builtin/rebase.c: Remove pointless messageBen Wijen, Aug 30, 2019
  31. Junio C HamanoAug 30, 2019
  32. BenAug 31, 2019
  33. 1/2 t3420: never change upstream branchBen Wijen, Aug 18, 2019
  34. Junio C HamanoAug 19, 2019
  35. Phillip WoodAug 20, 2019
  36. Phillip WoodAug 19, 2019
  37. BenAug 19, 2019
  38. Junio C HamanoAug 19, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.