我如何 `git rebase -i` 并防止 "You asked to amend the most recent commit, but doing so would make it empty."?
How do I `git rebase -i` and prevent "You asked to amend the most recent commit, but doing so would make it empty."?
我想运行一个git rebase -i some-hash
.
当我 运行 它时,我得到错误:
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 [...]
该错误似乎特定于单个提交,因为 --allow-empty
不是我可以传递给 rebase 的选项。
显然 --keep-empty
是我可以传递给 git rebase
的选项,但它似乎无法解决问题。
我如何变基,并告诉 git,如果变基中的提交最终没有效果,请不要担心?
好像是 运行:
git commit --allow-empty
git rebase --continue
创建 2 个压缩的提交,而不是一个。
运行 git rebase -i some-hash
允许我将 2 个新提交压缩为一个。
如果您没有对单个提交进行变基并面临同样的问题,原因是变基的最终结果是一个空提交。
假设您不想提交空提交,假设您有这两个提交:
commit 1
commit 2
当你想合并这两个提交时(比如 git rebase -i HEAD~2
),你会收到错误,解决方法是通过执行以下命令 两次来重置这两个提交:
git reset HEAD^
错误信息1有点误导,因为git rebase
本身不支持--allow-empty
。所以我们需要另一个命令。我们可以再做一次提交(比如@z5h),但是你 仍然 有两个提交需要 fixup/squash.
解决方法其实很简单:
git commit --amend --allow-empty
git rebase --continue
这很好地防止了创建另一个提交并直接导致空提交。
1 你要求修改最近的提交,但这样做会使
它是空的。 您可以使用 --allow-empty 重复您的命令,或者您可以
使用 "git reset HEAD^".
完全删除提交
[强调]
我发现最简单的解决方案是交互式变基 (git rebase -i {some head}
),然后删除导致问题的提交(在变基屏幕中 d
)。
如果您知道提交是彼此的直接镜像(压缩它们将导致空提交),并且尝试通过 rebase 压缩不起作用,那么只需删除提交本身就可以了。
虽然听起来很痛苦,但无论如何你都在摆弄历史,所以它有助于清理。
我想运行一个git rebase -i some-hash
.
当我 运行 它时,我得到错误:
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 [...]
该错误似乎特定于单个提交,因为 --allow-empty
不是我可以传递给 rebase 的选项。
显然 --keep-empty
是我可以传递给 git rebase
的选项,但它似乎无法解决问题。
我如何变基,并告诉 git,如果变基中的提交最终没有效果,请不要担心?
好像是 运行:
git commit --allow-empty
git rebase --continue
创建 2 个压缩的提交,而不是一个。
运行 git rebase -i some-hash
允许我将 2 个新提交压缩为一个。
如果您没有对单个提交进行变基并面临同样的问题,原因是变基的最终结果是一个空提交。
假设您不想提交空提交,假设您有这两个提交:
commit 1
commit 2
当你想合并这两个提交时(比如 git rebase -i HEAD~2
),你会收到错误,解决方法是通过执行以下命令 两次来重置这两个提交:
git reset HEAD^
错误信息1有点误导,因为git rebase
本身不支持--allow-empty
。所以我们需要另一个命令。我们可以再做一次提交(比如@z5h),但是你 仍然 有两个提交需要 fixup/squash.
解决方法其实很简单:
git commit --amend --allow-empty
git rebase --continue
这很好地防止了创建另一个提交并直接导致空提交。
1 你要求修改最近的提交,但这样做会使
它是空的。 您可以使用 --allow-empty 重复您的命令,或者您可以
使用 "git reset HEAD^".
完全删除提交
[强调]
我发现最简单的解决方案是交互式变基 (git rebase -i {some head}
),然后删除导致问题的提交(在变基屏幕中 d
)。
如果您知道提交是彼此的直接镜像(压缩它们将导致空提交),并且尝试通过 rebase 压缩不起作用,那么只需删除提交本身就可以了。
虽然听起来很痛苦,但无论如何你都在摆弄历史,所以它有助于清理。