You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保留完整提交历史并合并指定分支提交?冲突场景解决方案问询

解决方案:保留提交历史的前提下完成冲突合并

当然有办法搞定这个场景!你可以通过两种方式实现,都能完整保留hash21~hash25的提交历史,下面详细说明:

方案一:批量Cherry-Pick+冲突分步解决

这种方式直接针对目标提交序列操作,步骤清晰:

  1. 先切换到B1分支:
    git checkout B1
    
  2. 启动批量cherry-pick,覆盖hash21到hash25的所有提交:
    git cherry-pick hash21^..hash25
    

    注:hash21^是为了确保包含hash21本身,如果直接用hash21..hash25会从hash22开始

  3. 当Git在hash22处暂停并提示冲突时,你需要先处理冲突:
    • 打开冲突的test.php文件,根据你的需求解决内容冲突(比如你可以先应用hash22的修改,或者暂时保留B1的内容——没关系,后面hash24的重命名会最终修正这个文件的状态)
    • 解决冲突后,标记文件为已解决:
      git add test.php
      
    • 继续执行cherry-pick序列:
      git cherry-pick --continue
      
  4. 后续的hash23、hash24、hash25会自动执行,hash24的文件重命名操作会覆盖之前的冲突文件状态,最终完成所有提交的迁移,且每一条提交历史都会被保留。

方案二:用git rebase --onto迁移提交段

如果B3的提交是基于B2的hash12衍生的,用rebase批量迁移更高效:

  1. 先创建一个临时分支,指向B3的最后一个提交hash25:
    git checkout -b temp hash25
    
  2. 执行rebase --onto,把temp分支中从hash12之后的所有提交(也就是hash21~hash25)迁移到B1分支上:
    git rebase --onto B1 hash12
    
  3. 过程中如果在hash22处遇到冲突,同样解决冲突后执行:
    git add test.php
    git rebase --continue
    
  4. 迁移完成后,切换回B1分支并合并临时分支(这是快进合并,不会产生新的提交):
    git checkout B1
    git merge temp
    
  5. 最后删除临时分支即可:
    git branch -d temp
    

注意事项

  • 操作前建议备份B1分支(比如git checkout B1 && git checkout -b B1_backup),避免操作失误丢失内容
  • 冲突解决时,确保最终的文件状态符合你的预期:比如hash24完成test.php到test2.php的重命名后,B1分支中应该存在test2.php(内容为echo B)和原有的test.php(内容为echo A),如果有调整需求可以在冲突解决时提前处理

内容的提问来源于stack exchange,提问作者Sato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:56:03