git - 当不进行 cherry-pick 时,之前的 cherry-pick 现在为空

标签 git rebase cherry-pick

我正在尝试使用 git rebase -i HEAD~19 删除提交列表。我过去曾成功地使用过此方法,但是当我尝试运行然后退出 vim 而不进行任何更改(:q!)时,我收到此错误:

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

Otherwise, please use 'git cherry-pick --skip'
interactive rebase in progress; onto dd0b851

我不是在挑选,也不知道为什么我会收到要跳过的错误。

最佳答案

发生这种情况是因为您没有做您认为正在做的事情:

but when I try running and then quitting vim without any changes(:q!)...

当您退出而不修改该文件时,您实际上仍在进行 rebase 。 如果您想退出而不进行 rebase ,您应该删除文件中的所有行(或至少删除包含提交的每一行),然后保存并退出。这将显示错误并中止 rebase 。

退出通常有效,并且似乎什么都不做的原因是,当你的历史记录是线性的时,默认情况下,如果没有任何操作,Git 不会重写提交。关于提交的所有内容都已更改,因此它保留原始提交 ID 并继续。这就是为什么您仍然会看到“rebasing 1/X...”,因为它会迭代所有提交,但实际上并不会重写它们。

如果您的历史记录不是线性的(意味着您有一些 merge 提交包含在 rebase 中),则 merge 提交不会包含在待办事项列表中。因此,这次 rebase 实际上将重写至少一些提交,因为您在此重写中缺少 merge 提交,因此图表并不相同。在 rebase 期间,如果遇到没有更改的提交,您将收到您看到的消息。它停在这里是因为这被认为是不寻常的,它让您有机会决定要做什么。它提到cherry-pick的原因是因为在幕后,在rebase期间重写提交本质上是为您对每个提交进行cherry-pick。

旁注:在这种情况下,最有可能出现空提交的原因是, merge 提交的两侧都有类似的提交(rebase 待办事项中缺少该提交)列表)。

关于git - 当不进行 cherry-pick 时,之前的 cherry-pick 现在为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71758449/

相关文章:

git - standard_init_linux.go :185: exec user process caused "no such file or directory" building docker image

git - 如何在没有冲突相关错误的情况下修改线性历史中的快照(提交)?

git - 防止 Master Branch 领先于 dev

git - 为什么重新调整的提交 ID 与精心挑选的 ID 不同?

git - 挑选一个提交包括以前的提交?

Git 按文件 ID 添加

来自不同目录的git子模块更新

Git - 忘记切换分支

git - merge 跟踪 Git cherry-pick ?

git - 如何追加不相关分支的提交?