如何 `git rebase -i` 并防止“您要求修改最近的提交,但这样做会使它变空。”?

问题描述 投票:0回答:4

我想运行一个

git rebase -i some-hash

当我运行它时,我收到错误:

您要求修改最近的提交,但这样做会使其成功 空的。您可以使用 --allow-empty 重复您的命令,或者您可以 使用“git reset HEAD^”完全删除提交。
[...]
无法申请[...]

该错误似乎特定于单个提交,因为

--allow-empty
不是我可以传递给 rebase 的选项。

显然

--keep-empty
是一个我可以传递给
git rebase
的选项,但它似乎并不能解决问题。

我怎样才能rebase,并告诉git,不要担心rebase中的提交最终没有效果?

git git-rebase
4个回答
30
投票

好像在跑步:

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

创建 2 个压缩提交,而不是 1 个。 运行

git rebase -i some-hash
允许我将 2 个新提交压缩为一个。


5
投票

如果您没有对单个提交进行变基并面临同样的问题,那么原因是您的变基的最终结果是一个空提交。

假设您不想提交空提交,假设您有这两个提交:

commit 1
commit 2

当您想要合并这两个提交时(例如

git rebase -i HEAD~2
),您会收到错误,解决方法是通过执行以下命令两次来重置这两个提交:

git reset HEAD^

4
投票

错误消息1有点误导,因为

git rebase
本身不支持
--allow-empty
。所以我们需要另一个命令。我们可以进行另一个提交(例如@z5h),但是您仍然有两个需要修复/压缩的提交。

解决方案其实很简单:

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

这很好地防止了创建另一个提交并直接导致空提交。


1 您要求修改最近的提交,但这样做会导致
它是空的。 您可以使用 --allow-empty 重复您的命令,或者也可以
使用“git reset HEAD^”完全删除提交。
[强调]


2
投票

我发现最简单的解决方案是交互地变基 (

git rebase -i {some head}
),然后删除导致问题的提交(在变基屏幕中使用
d
)。

如果您知道提交是彼此的直接镜像(压缩它们将导致空提交),并且尝试通过 rebase 进行压缩是行不通的,那么只需删除提交本身就可以了。

尽管听起来很痛苦,但无论如何你都在摆弄历史记录,所以它有助于清理。

© www.soinside.com 2019 - 2024. All rights reserved.