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

Re: Confusing error message in rebase when commit becomes empty

From
Jeff King <peff@peff.net>
Date
Jun 13, 2014, 07:27 UTC
Message-ID
<20140613072749.GD7908@sigill.intra.peff.net>
In-Reply-To
<alpine.DEB.2.00.1406111321090.6307@ds9.cixit.se>
On Wed, Jun 11, 2014 at 01:49:04PM +0100, Peter Krefting wrote:
Show 26 quoted lines
> Hi!
> 
> I am rebasing a branch to combine a couple of commits. One is a revert of a
> previous commit. Since there are commits in-between, I do "squash" to make
> sure I get everything, and then add the actual change on top of that. The
> problem is that rebase stops with a confusing error message (from commit,
> presumably):
> 
>   $ git rebase --interactive
>   [...]
>   You asked to amend the most recent commit, but doing so would make
>   it empty. You can repeat your command with --allow-empty, or you can
>   remove the commit entirely with "git reset HEAD^".
>   rebase in progress; onto 342b22f
>   You are currently rebasing branch 'mybranch' on '342b22f'.
> 
>   No changes
> 
>   Could not apply 4682a1f20f6ac29546536921bc6ea0386441e23e... Revert "something"
> 
> OK, so I should retry the command with --allow-empty, then:
> 
>   $ git rebase --interactive --allow-empty
>   error: unknown option `allow-empty'
> 
> Nope, that's not quite right.

Yeah, that message comes from "commit --amend", which is called by rebase to handle the squash. The "repeat your command" part is confusing. The right thing to do here is:

  git commit --amend --allow-empty
if you want to have an empty commit, or:
  git reset HEAD^
if you want to have nothing.

Of course the first one would never occur to you, because it is not "your command" in the first place. :)

We could change it to say "use git commit --amend --allow-empty", though that is slightly incomplete for other cases (e.g., you might have actually said "git commit --amend -a", and the right advice is to include that "-a".

Commit understands a "whence" flag that could let it customize the message for the case of rebase. But I think you would have to teach determine_whence to figure out that we are in a rebase.

> Running "git rebase --continue" does work as expected, but perhaps it just
> shouldn't stop in this case?

As you noticed later in the thread, doing "--continue" omits the revert. That's because it is telling rebase "OK, I've fixed this up, we can keep going". But of course it wasn't fixed.

Previous: Jeff King
Message 7 of 7 in “Confusing error message in rebase when commit becomes empty”
  1. Peter KreftingJun 11, 2014
  2. Phil HordJun 11, 2014
  3. Peter KreftingJun 11, 2014
  4. Phil HordJun 11, 2014
  5. Peter KreftingJun 13, 2014
  6. Jeff KingJun 13, 2014
  7. Jeff KingJun 13, 2014

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.