其他人可以更好地改写这个问题,但这就是我想要做的事情:
我一直在为一个长期存在的主要重构分支B工作。我一直在和主人合并,到现在为止,分支B超过了大约200个提交。我现在准备发送一个pull请求,但我想稍微清理一下我的提交历史。基本上我想把我所有的~200次提交压缩成3次提交:
而且,就这样我不搞砸了,我想做这个历史 - 在我自己的分支B的一个单独的分支上重写,并作为我的拉取请求发送该分支。
我在git中实现这一目标的最简单方法是什么?
答案 0 :(得分:2)
假设您要合并到master
:
创建并签出新分支:
git checkout -b going-to-squash
重新加入主人
git rebase --squash master
重置为主分支
git reset master
现在,你的整个被压扁的分支将处于未承诺的状态。
立即创建新提交。
我会在这一步使用gui,但在命令行上它是完全可行的。
答案 1 :(得分:0)
git rebase --interactive
(因为described in the Pro Git book)不实用,因为它允许选择或压缩提交(不是提交的一部分)
另一种方式可能是generate a giant patch(如git format-patch origin/master
),然后解析该文件制作3个补丁文件:
然后,您可以从发起的提交branch B
创建一个分支(请参阅“Reference Git branch start commit”),并应用这三个补丁。