问题
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?
回答1:
Seems like running:
git commit --allow-emptygit 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.
回答2:
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^
回答3:
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]
来源:https://stackoverflow.com/questions/37599665/how-do-i-git-rebase-i-and-prevent-you-asked-to-amend-the-most-recent-commit