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

[PATCH 2/2] rebase --root -k: fix when root commit is empty

From
PWPhillip Wood <phillip.wood@talktalk.net>
Date
Mar 14, 2018, 11:11 UTC
Message-ID
<20180314111127.14217-2-phillip.wood@talktalk.net>
In-Reply-To
<20180314111127.14217-1-phillip.wood@talktalk.net>
From: Phillip Wood <phillip.wood@dunelm.org.uk>

When the root commit was empty it was being pruned by the --cherry-pick option passed to rev-parse. This is because when --onto is omitted rebase creates an empty commit (which it later amends) for the new root commit.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
---
 git-rebase--interactive.sh | 7 ++++++-
 git-rebase.sh              | 1 +
 t/t3428-rebase-signoff.sh  | 2 +-
 3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 4ea54fc1c4..3ad74fc57c 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -894,7 +894,12 @@ then
 	revisions=$upstream...$orig_head
 	shortrevisions=$shortupstream..$shorthead
 else
-	revisions=$onto...$orig_head
+	if test -n "$squash_onto"
+	then
+		revisions=$orig_head
+	else
+		revisions=$onto...$orig_head
+	fi
 	shortrevisions=$shorthead
 fi
 if test t != "$preserve_merges"
diff --git a/git-rebase.sh b/git-rebase.sh
index 40301756be..30b8eaf489 100755
--- a/git-rebase.sh
+++ b/git-rebase.sh
@@ -61,6 +61,7 @@ $(gettext 'Resolve all conflicts manually, mark them as resolved with
 You can instead skip this commit: run "git rebase --skip".
 To abort and get back to the state before "git rebase", run "git rebase --abort".')
 "
+squash_onto=
 unset onto
 unset restrict_revision
 cmd=
diff --git a/t/t3428-rebase-signoff.sh b/t/t3428-rebase-signoff.sh
index 2ff7f534e3..90ca6636d5 100755
--- a/t/t3428-rebase-signoff.sh
+++ b/t/t3428-rebase-signoff.sh
@@ -59,7 +59,7 @@ test_expect_success 'rebase --exec --signoff adds a sign-off line' '
 	test_cmp expected-signed actual
 '
 
-test_expect_failure 'rebase --root --signoff adds a sign-off line' '
+test_expect_success 'rebase --root --signoff adds a sign-off line' '
 	git commit --amend -m "first" &&
 	git rebase --root --keep-empty --signoff &&
 	git cat-file commit HEAD^ | sed -e "1,/^\$/d" >actual &&
-- 
2.16.2
Previous: Phillip WoodNext: Johannes Schindelin
Message 2 of 15 in “rebase: support --signoff with implicit rebase”
  1. 1/2 rebase: support --signoff with implicit rebasePhillip Wood, Mar 14, 2018
  2. 2/2 rebase --root -k: fix when root commit is emptyPhillip Wood, Mar 14, 2018
  3. Johannes SchindelinMar 15, 2018
  4. Phillip WoodMar 15, 2018
  5. Junio C HamanoMar 14, 2018
  6. Johannes SchindelinMar 15, 2018
  7. Johannes SchindelinMar 15, 2018
  8. Phillip WoodMar 15, 2018
  9. Johannes SchindelinMar 16, 2018
  10. 0/3 rebase: extend --signoff supportPhillip Wood, Mar 20, 2018
  11. 2/3 rebase -p: error out if --signoff is givenPhillip Wood, Mar 20, 2018
  12. 1/3 rebase: extend --signoff supportPhillip Wood, Mar 20, 2018
  13. 3/3 rebase --keep-empty: always use interactive rebasePhillip Wood, Mar 20, 2018
  14. Johannes SchindelinMar 20, 2018
  15. Phillip WoodMar 20, 2018

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.