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 would make it empty. You can repeat your command with --allow-empty, or you can remove the commit entirely with "git reset HEAD^".
[...]
Could not apply [...]
That error seems specific to a single commit, as --allow-empty
isn't an option I can pass to rebase.
Apparently --keep-empty
IS an option I can pass to git rebase
, but it doesn't seem to fix the problem.
How can I rebase, and tell git, don't worry if a commit in the rebase is ends up having no effect?
If you don't want rebase to stop at each commit if you get any merge conflicts and want it to stop only once during the rebase process, you can squash all the commits into one in your fix/align-div-vertically branch by squashing them using interactive rebase before rebasing with the master.
To modify older or multiple commits, you can use git rebase to combine a sequence of commits into a new base commit. In standard mode, git rebase allows you to literally rewrite history — automatically applying commits in your current working branch to the passed branch head.
You can run git rebase --abort to completely undo the rebase. Git will return you to your branch's state as it was before git rebase was called. You can run git rebase --skip to completely skip the commit.
For each change you make, you'll need to perform a new commit, and you can do that by entering the git commit --amend command. When you're finished making all your changes, you can run git rebase --continue . As before, Git is showing the commit message for you to edit.
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.
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^
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.
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]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With