首页/开发/Git 与协作速查/变基还是合并:选择依据
合并变基与冲突71 条

变基还是合并:选择依据

关键判断是「分支是否已共享」与「要不要保留真实集成拓扑」:私有分支重写历史可读性好,公共分支合并更安全。

Git 与协作速查开发更新于 2026-10-13

这是怎么一回事

变基与合并解决的是同一个问题:把两条分支上的改动汇到一起。区别在于历史怎么记录——合并保留分叉,用一个合并提交把两侧连起来;变基把本地提交挪到目标分支顶端,历史看起来像一条直线。两者没有绝对优劣,取决于分支是否已经被别人使用。

选择的判断依据

核心判断是分支可见性:只有你自己用的分支,改写历史没有副作用,变基能让历史更干净;已经推送并被他人拉取的分支,改写会让协作者的历史分叉,此时合并更安全。其次看团队工具链,如果评审与发版流程依赖合并点来识别「一个特性」,那就需要保留合并提交。

对比

维度mergerebase
历史形态保留分叉与合并点线性、无合并提交
提交哈希不变全部重写
他人影响无共享分支上会打断协作者
冲突处理一次解决全部矛盾可能逐提交反复出现
可追溯性合并点标出特性边界提交像新写的,看不出先后
适用场景主干集成、公共分支个人分支整理、跟进上游

个人分支跟进主干

个人分支跟进主干
git switch feature        # 切到自己的分支
git fetch origin          # 取回最新主干
git rebase origin/main    # 把本地提交叠到主干最新位置
git log --oneline --graph -8   # 核对是否形成线性历史

把特性并入主干

把特性并入主干
git switch main           # 切到主干(接收方)
git pull --ff-only        # 先让主干与远端对齐
git merge --no-ff feature # 保留合并点,标出特性边界
git log --graph --oneline -10  # 复核合并结果
团队约定优先:同一个仓库混用两种策略也可以,但要在贡献指南里写清楚哪些分支允许改写历史,否则协作时容易互相踩到。
变基后的分支首次推送需要强推,用 --force-with-lease 而不是 --force,能在远端存在你没见过的提交时自动拒绝覆盖。
混用两种策略的仓库里,判断某段历史经历过什么可以借助合并点与提交时间:合并提交表示这里发生过一次集成,线性区段则更可能是变基后的结果。

易错点

  • 「永远 rebase」或「永远 merge」都不是普适结论,取决于分支可见性与团队工具链
  • 变基后的分支首次推送需要强推,务必用 --force-with-lease 而不是 --force
  • 在共享分支上变基会让协作者的历史分叉,需要他们手动对齐,代价常被低估
  • 只允许快进的流程里,本地一旦分叉就无法推送,要提前约定处理方式

数据来源与参考

  • Pro Git 2nd Edition · 3.6 变基(变基的风险)
  • Git 官方文档:git-rebase
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌