Git,如何“强制”壁球变基

Mar*_*tin 5 git git-merge git-rebase

我需要一起“挤压”一些提交。通常我习惯做这样的事情:

git rebase -i HEAD~10

但是,现在我收到以下错误:

错误:无法应用 2009972... 修复

解决此问题后,运行“git rebase --continue”。如果您更喜欢跳过此补丁,请改为运行“git rebase --skip”。要检查原始分支并停止变基,请运行“git rebase --abort”。

如您所见git,我假装我解决了所有冲突。现在,我不想也无法解决任何冲突。

我需要的是这样一种方式git:“嘿,我不想合并任何东西:只需获取此分支中所有跟踪的文件 - 因为它们出现在最后一次提交/HEAD 中,丢弃/删除之前的前 10 次提交最新的,最后“应用”这些文件作为新的提交”:

例如,假设这是所有提交哈希的列表:

1-2-3-4-5-6-7-8-9-10-11-12,其中 HEAD 指向 12。

我想压缩/删除/无论这个操作被称为包含 2-11 的所有提交,以便 a 后的最终结果git log给出:

1-12

其中操作前后的文件必须相同

获得我需要的东西的命令是什么?

Use*_*ess 7

最简单的解决方案(在中止当前 rebase 之后)是:

$ git reset --soft HEAD~10
Run Code Online (Sandbox Code Playgroud)

现在,您的 HEAD 已将 10 个提交移回,但您的文件都没有更改:它们都将显示为要提交的新更改。

然后,只需像往常一样提交它们。


这种方法的缺点是,当您编写新提交消息时,您无法访问中间提交消息。

另一种方法是rebase -i通过指定他们的冲突解决策略来使原始命令为您工作:

$ git rebase -i -s theirs HEAD~10
Run Code Online (Sandbox Code Playgroud)

知道您是如何首先设法解决冲突会很有趣,但rebase -i通常应该干净利落地应用。除非这十次提交中的一些本身是合并的?