我需要将一些提交“压缩”在一起。通常我习惯于做这样的事情:
git rebase -i HEAD~10
但是,现在我收到以下错误:
error: could not apply 2009972... fixes
When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
如您所见,git
假装我解决了所有冲突。现在,我不想也无法解决任何冲突。
我需要的是一种方法来告诉 git
类似:“嘿,我不想 merge 任何东西:只获取这个分支中的所有跟踪文件——因为它们出现在最后一次提交中/HEAD,丢弃/删除最新提交之前的前 10 次提交,最后“应用”这些文件作为新提交”:
例如,假设这是所有提交哈希的列表:
1-2-3-4-5-6-7-8-9-10-11-12
,其中 HEAD 指向 12。
我想压缩/删除/不管这个操作叫什么,包括 2-11 中的所有提交,以便 git log
之后的最终结果给出:
1-12
其中操作前后的文件必须相同。
获取所需内容的命令是什么?
最佳答案
最简单的解决方案(在中止当前 rebase 之后)是:
$ git reset --soft HEAD~10
现在,您的 HEAD 已将十次提交后移,但您的文件都没有更改:它们都将显示为要提交的新更改。
然后,像往常一样提交它们。
这种方法的缺点是您在编写新提交消息时无法访问中间提交消息。
另一种方法是通过指定他们的冲突解决策略,让原始的rebase -i
命令为您工作:
$ git rebase -i -s theirs HEAD~10
虽然首先知道您是如何设法解决冲突会很有趣,rebase -i
通常应该干净地应用。除非这十个提交中的一些本身就是 merge ?
关于Git,如何对 "force"进行 squash rebase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39293376/