PR中使用Git变基时,如何合并自身提交且保留他人提交?
解决方案:保留他人提交并合并自身提交
针对Blue的提交,直接选择**pick(或缩写p)**即可——完全不用担心你的合并改动会混入Blue的提交。pick操作的作用就是原封不动保留该提交的所有内容、作者信息和提交历史,和你的Red提交合并操作完全隔离,不会产生任何交叉修改。
你当前的rebase指令存在错误:前三个Red提交都设为squash,但它们没有对应的pick提交作为合并基础(squash必须依附于一个pick的提交)。根据你的需求,这里提供两种可行的调整方案:
方案1:保持提交相对顺序,合并Blue前后的Red提交
如果你希望Blue的提交仍保留在原历史位置(夹在Red的提交之间),可以这样设置交互式rebase的操作列表:
p a123bc Red # 将最早的Red提交作为合并基础 s a123bd Red # 合并到上一个pick的Red提交 s a123be Red # 合并到上一个pick的Red提交 p a123bf Blue # 原封不动保留Blue的提交 p a123bg Red # 保留最后一个Red提交(若要将它也合并到前面的Red提交,可改为`s`,但可能引发冲突,需谨慎)
最终历史会是:合并后的Red提交(包含前3个Red改动)→ Blue提交 → 单独的Red提交(最后1个)。
方案2:合并所有Red提交为一个,调整提交顺序
如果你一定要把所有Red的提交合并成一个,需要调整提交顺序,把所有Red提交放在一起合并,再保留Blue提交:
p a123bg Red # 用最新的Red提交作为合并基础 s a123be Red # 合并到上一个pick的Red提交 s a123bd Red # 合并到上一个pick的Red提交 s a123bc Red # 合并到上一个pick的Red提交 p a123bf Blue # 原封不动保留Blue的提交
最终历史会是:合并后的Red提交(包含所有4个Red改动)→ Blue提交,Blue的提交内容完全不受影响。
注意事项
- 执行rebase前建议备份当前分支(比如
git branch backup),防止操作失误丢失提交。 - 如果rebase过程中出现冲突,解决冲突后执行
git rebase --continue即可完成操作。
内容的提问来源于stack exchange,提问作者Kerry
相关产品推荐
相关产品推荐

