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

在 squash merge 后如何将分支与 master 分支同步?

替换分支中原有提交为压缩提交以同步主分支

场景回顾

合并前提交历史:

master : a->b
branch1: a->b->c->d
branch2: a->b->c->d->e

将branch1通过squash merge合并到master后,提交历史变为:

master : a->b->f (f是c、d压缩后的提交)
branch2: a->b->c->d->e

需求:将branch2的提交历史改为a->b->f->e,即用压缩后的f替换原有的c、d提交,同时避免额外提交或保留冗余提交记录。

解决方案:使用git rebase --onto

这个命令可以精准指定要迁移的提交范围,跳过不需要的c、d提交,直接将e重新应用到master的f提交之上。

  • 切换到branch2分支:
    git checkout branch2
    
  • 执行rebase命令:
    git rebase --onto master <提交b的哈希值> branch2
    
    这里的<提交b的哈希值>可以替换为任何能唯一标识b的引用,比如如果b是master合并前的最后一个提交,也可以用master~1(当前master的前一个提交就是b)。

命令说明

  • --onto master:指定新的基底为当前master分支(即包含f提交的最新状态)。
  • <提交b的哈希值>:指定要跳过的提交起始点,rebase会将branch2中该提交之后的所有提交(仅e),重新应用到新的基底上,自动跳过c、d提交。

执行完成后,branch2的提交历史就会变成a->b->f->e,完全同步master的压缩提交,且没有冗余的提交记录。如果e和f之间存在冲突,解决冲突后继续执行git rebase --continue即可,最终不会产生额外的合并提交。

与常规操作的差异

  • 普通merge:会产生额外的合并提交,导致提交历史冗余。
  • 普通rebase:会尝试将c、d、e依次应用到f上,不仅会触发冲突,还会保留c、d提交,无法达到替换的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:18:20