如何在不解决其他提交冲突的情况下在 git 中变基,或者在保持其他人提交不变的情况下压制我的所有提交?


---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个提交

最新更新