如何在保留“最新”提交的同时压缩大量“先前”提交?
问题描述:
我已经克隆了one of Github boilerplate project,但忘记重置原始回购的历史,并且已经在其主分支上创建了相当数量的提交。如何在保留“最新”提交的同时压缩大量“先前”提交?
现在我的提交历史看起来像这样。
初始提交 - (数百样板提交) - (数十我提交的)
我想要做的就是“南瓜”(或“合并”如果“挤压”在这里不是一个适当的词)所有来自我从克隆的原始回购的提交,同时离开我最近的历史提交。我试图通过使用git rebase --root -i
来做到这一点,但有数百个提交来压制(原始回购)并选择(我自己的回购),这使得很难这样做。
有没有一种方便的方法来实现这一目标?我不介意在我自己的承诺开始之前,我失去了所有的历史,或者如果我创建了一个新的回购协议。
答
假设最后的“锅炉板提交” SHA是abc123
,和你的当前分支是master
,请执行下列操作:
git branch my-new-branch master
git checkout abc123 --orphan temp-branch
git commit -m "Initial boilerplate code"
git rebase --onto temp-branch abc123 my-new-branch
git branch -d temp-branch
这将让你与my-new-branch
指向所有提交之后是锅炉板代码的单个壁球提交。你可以推动这个分支到一个新的回购,或者(如果这是一个本地唯一回购,或者你不介意做推力)去除master
并将my-new-branch
更名为master
,或其他。
不好意思打扰你,但你能解释一下'--orphan'和'--onto'在这种情况下做什么吗? –
不用麻烦! '--orphan'创建一个没有父节点的分支,索引的内容匹配'abc123'。 'rebase --onto'“移动”'my-new-branch'可达到的所有提交,但'abc123'无法到达'temp-branch',以及移动'my-new-branch'指针本身。 –