我想运行一个
git rebase -i some-hash
。
当我运行它时,我收到错误:
您要求修改最近的提交,但这样做会使其成功 空的。您可以使用 --allow-empty 重复您的命令,或者您可以 使用“git reset HEAD^”完全删除提交。
[...]
无法申请[...]
该错误似乎特定于单个提交,因为
--allow-empty
不是我可以传递给 rebase 的选项。
显然
--keep-empty
是一个我可以传递给git rebase
的选项,但它似乎并不能解决问题。
我怎样才能rebase,并告诉git,不要担心rebase中的提交最终没有效果?
好像在跑步:
git commit --allow-empty
git rebase --continue
创建 2 个压缩提交,而不是 1 个。 运行
git rebase -i some-hash
允许我将 2 个新提交压缩为一个。
如果您没有对单个提交进行变基并面临同样的问题,那么原因是您的变基的最终结果是一个空提交。
假设您不想提交空提交,假设您有这两个提交:
commit 1
commit 2
当您想要合并这两个提交时(例如
git rebase -i HEAD~2
),您会收到错误,解决方法是通过执行以下命令两次来重置这两个提交:
git reset HEAD^
错误消息1有点误导,因为
git rebase
本身不支持--allow-empty
。所以我们需要另一个命令。我们可以进行另一个提交(例如@z5h),但是您仍然有两个需要修复/压缩的提交。
解决方案其实很简单:
git commit --amend --allow-empty
git rebase --continue
这很好地防止了创建另一个提交并直接导致空提交。
1 您要求修改最近的提交,但这样做会导致
它是空的。 您可以使用 --allow-empty 重复您的命令,或者也可以
使用“git reset HEAD^”完全删除提交。
[强调]
我发现最简单的解决方案是交互地变基 (
git rebase -i {some head}
),然后删除导致问题的提交(在变基屏幕中使用 d
)。
如果您知道提交是彼此的直接镜像(压缩它们将导致空提交),并且尝试通过 rebase 进行压缩是行不通的,那么只需删除提交本身就可以了。
尽管听起来很痛苦,但无论如何你都在摆弄历史记录,所以它有助于清理。