假设我正在开发一个重要的功能分支,该分支遵循一个具有相当多活动的项目的“主”分支。这通常使我处于一种情况,为了保持理智,我必须稍微落后于“头脑”,以便弄清楚如何使某些事情发挥作用。
这通常会导致我的分支在 master 分支后面有几千次提交 - 伴随着所有有趣的事情,例如相关模块被重构或类似。一旦我决定开始“追赶”,这给我留下了一个棘手的任务:单片合并是不可能的,因为:
几乎不可能同时考虑所有“我的”更改乘以所有“主”更改。我尝试了几次,我犯了很多错误,最终不得不退出。
由此产生的合并将是如此巨大,以至于隐藏在其中的所有魔法都将是一场文档噩梦。
因此,我最终采用的方法是进行“分阶段”合并:不是直接与 master 合并,而是选择性地与 master 历史中的“有趣”点合并。这通常是关于可能有“棘手”冲突的模块的提交。这样做的最大好处是我有实际可构建的中间点,我可以推理和测试,因此使整个过程更易于管理。
然而,这种方法似乎有缺点......也就是说,如果合并中出现错误,我稍后才会注意到。我尝试使用git rebase -i -p
以将修复压缩到历史中,但发现这似乎不是人们所设想的那种用法。再具体一点
在合并之间插入更改似乎会导致变基过程因或多或少复杂的冲突而摆脱困境,并且
将常规提交压缩为合并提交似乎会使新提交成为非合并,失去对合并提交的引用
现在我正在使用一些或多或少花哨的 shell 脚本来解决所有这些问题,但我很想知道我是否错过了一些可以帮助我处理这种情况的 Git 功能。到目前为止,我能想到的最好的想法是使用 rerere 手动重做所有合并。