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

[PATCH 1/2] rebase -i --autosquash: demonstrate a problem skipping the last squash

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Aug 31, 2018, 23:45 UTC
Message-ID
<8753c4e5fba5bb9cc42fdf438f4a69e702261a15.1535759099.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.30.git.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

The `git commit --squash` command can be used not only to amend commit messages and changes, but also to record notes for an upcoming rebase.

For example, when the author information of a given commit is incorrect, a user might call `git commit --allow-empty -m "Fix author" --squash <commit>`, to remind them to fix that during the rebase. When the editor would pop up, the user would simply delete the commit message to abort the rebase at this stage, fix the author information, and continue with `git rebase --skip`. (This is a real-world example from the rebase of Git for Windows onto v2.19.0-rc1.)

However, there is a bug in `git rebase` that will cause the squash message *not* to be forgotten in this case. It will therefore be reused in the next fixup/squash chain (if any).

This patch adds a test case to demonstrate this breakage.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 t/t3415-rebase-autosquash.sh | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
diff --git a/t/t3415-rebase-autosquash.sh b/t/t3415-rebase-autosquash.sh
index e364c12622..7d5ea340b3 100755
--- a/t/t3415-rebase-autosquash.sh
+++ b/t/t3415-rebase-autosquash.sh
@@ -330,4 +330,23 @@ test_expect_success 'wrapped original subject' '
 	test $base = $parent
 '
 
+test_expect_failure 'abort last squash' '
+	test_when_finished "test_might_fail git rebase --abort" &&
+	test_when_finished "git checkout master" &&
+
+	git checkout -b some-squashes &&
+	git commit --allow-empty -m first &&
+	git commit --allow-empty --squash HEAD &&
+	git commit --allow-empty -m second &&
+	git commit --allow-empty --squash HEAD &&
+
+	test_must_fail git -c core.editor="grep -q ^pick" \
+		rebase -ki --autosquash HEAD~4 &&
+	: do not finish the squash, but resolve it manually &&
+	git commit --allow-empty --amend -m edited-first &&
+	git rebase --skip &&
+	git show >actual &&
+	! grep first actual
+'
+
 test_done
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: Junio C Hamano
Message 2 of 8 in “rebase --autosquash: handle manual "final fixups"”
  1. 0/2 rebase --autosquash: handle manual "final fixups"Johannes Schindelin via GitGitGadget, Aug 31, 2018
  2. 1/2 rebase -i --autosquash: demonstrate a problem skipping the last squashJohannes Schindelin via GitGitGadget, Aug 31, 2018
  3. Re*: [PATCH 1/2] rebase -i --autosquash: demonstrate a problem skipping the last squashJunio C Hamano, Sep 4, 2018
  4. Johannes SchindelinSep 4, 2018
  5. Junio C HamanoSep 5, 2018
  6. 2/2 rebase -i: be careful to wrap up fixup/squash chainsJohannes Schindelin via GitGitGadget, Aug 31, 2018
  7. Junio C HamanoSep 4, 2018
  8. Johannes SchindelinSep 4, 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.