---A---
/
---main--------
---B---+A------/
-------C-?
以上是我团队回购的大致情况。功能A是一个巨大的分支,我绝对不得不离开它。我从B分支出来,但一直在定期从中提取,这意味着我有A的所有更改,并且在分支C上与main保持同步。这也意味着,在我对C的第一次和最后一次提交之间,有几十次提交,加上来自A的一次巨大合并。我的回购要求每次推送main都被压扁,我希望避免将其他人的工作重新承诺为我自己的工作,这就是如果我在第一次C提交之前执行git reset --soft
,而git rebase -i
迫使我解决每一个冲突,即使是那些不是我自己提交的冲突。
我怎么能"重置";并在我开始使用C之前压缩我的所有提交,而不必解决其他分支的冲突或将每个提交重新提交为我自己的?
更新:我不完全确定是怎么做的,但在C的历史中期使用git reset --soft
进行提交实际上正是我想要的,将我所有的更改都放在了前面的一个更改中。我很好奇上次我试的时候出了什么问题。从那里,我签出了B并使用了git merge --squash C
从main创建一个新分支。使用gitcherry-pick来获得B和C提交。
使用git-rebase-i HEAD~4压缩最后4个提交