How do I `git rebase -i` and prevent “You asked to amend the most recent commit, but doing so would make it empty.”?

前端 未结 4 536
天命终不由人
天命终不由人 2021-01-01 13:23

I want to run a git rebase -i some-hash.

When I run it, I get the error:

You asked to amend the most recent commit, but doing so

相关标签:
4条回答
  • 2021-01-01 13:34

    I found the simplest solution was to just interactively rebase (git rebase -i {some head}) and then drop the commits that were causing issues (with d in the rebase screen).

    If you know that the commits are direct mirrors of each other (squashing them will result in an empty commit), and trying to squash through rebase isn't working then simply removing the commits themselves works.

    As painful as it sounds, you're fiddling with the history anyway so it helps to clean up.

    0 讨论(0)
  • 2021-01-01 13:40

    If you are not rebasing a single commit and facing the same problem, the reason is the final result of your rebasing is an empty commit.

    Assuming you don't want to commit the empty commit, let's say you have these two commits:

    commit 1
    commit 2
    

    And you are getting the error when you want to merge these two commits (say by git rebase -i HEAD~2), the fix is to reset those two commits by doing the following command for two times:

    git reset HEAD^
    
    0 讨论(0)
  • 2021-01-01 13:45

    Seems like running:

    git commit --allow-empty
    git rebase --continue

    Creates 2 squashed commits, instead of one. Running git rebase -i some-hash allows me to squash the 2 new commits into one.

    0 讨论(0)
  • 2021-01-01 13:46

    The error message1 is a bit misleading, since git rebase itself does not support --allow-empty. So we need another command that does. We could make another commit (like @z5h), but then you still have two commits that you need to fixup/squash.

    The solution is actually quite simple:

    git commit --amend --allow-empty
    git rebase --continue
    

    This nicely prevents another commit from being created and directly results in an empty commit.


    1 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^".
    [emphasis added]

    0 讨论(0)
提交回复
热议问题