Git,如何“强制”挤压壁球

时间:2016-09-02 13:15:25

标签: 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的所有提交,以便git log之后的最终结果给出:

1-12

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

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

1 个答案:

答案 0 :(得分:3)

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

$ git reset --soft HEAD~10

现在,您的HEAD已经移回了十次提交,但没有一个文件发生变化:它们都会显示为要提交的新更改。

然后,正常提交它们。

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

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

$ git rebase -i -s theirs HEAD~10

知道你是如何设法在第一时间发生冲突会很有趣,rebase -i通常应该干净利落地应用。除非这十个提交中的一些本身是合并的?