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

Git分支存在合并提交时,如何压缩指定提交并复用原有合并结果?

解决方案:复用原有合并提交的树

当你使用git rebase -i A --rebase-merges时,默认Git会重新执行合并操作——即便压缩U、V后的提交树与原提交完全一致。要让Git直接复用M1、M2的合并结果,无需重新解决冲突,可以通过以下两种方法实现:

方法一:修改Rebase Todo文件指定复用合并提交

  1. 执行基础Rebase命令:
    git rebase -i A --rebase-merges
    
  2. 在弹出的todo编辑界面中做两处修改:
    • 将U的操作设为pick,V的操作设为fixup(若需要调整提交信息,可改为squash);
    • 找到对应M1、M2合并提交的行,默认格式类似:
      merge -C <临时提交ID> refs/heads/master # Merge branch 'master' into feature
      
      将行中的<临时提交ID>替换为原M1、M2的提交ID,修改后示例:
      merge -C M1 refs/heads/master # Merge branch 'master' into feature
      merge -C M2 refs/heads/master # Merge branch 'master' into feature
      
  3. 保存并退出编辑器,Git会直接复用M1、M2原有的合并结果完成Rebase,无需重新处理冲突。

原理说明

-C <commit-id>参数告诉Git:创建新合并提交时,直接复用指定提交的文件树和提交信息,而非重新执行合并计算。由于你压缩U、V后的提交树与原V的树完全一致,原M1合并master分支C与V的结果,和合并C与压缩后提交的结果完全相同,因此Git可以安全跳过冲突检测步骤。

方法二:手动创建压缩提交后嫁接分支

如果觉得修改todo文件麻烦,也可以手动构建分支:

  1. 先创建U、V的压缩提交:
    git checkout V
    git reset --soft U^
    git commit -m "合并U和V的提交信息" # 此步骤生成新提交U'
    
  2. 将原feature分支中M1及之后的提交嫁接到U'上,保留合并结构:
    git rebase --onto U' V feature --rebase-merges
    
    由于U'的文件树与原V完全一致,Git会自动识别合并结果与原M1、M2匹配,无需重新解决冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:27