首页/开发/Git 与协作速查/分支同步策略(rebase 或 merge)

分支同步策略(rebase 或 merge)

本地分支与主线同步的两种口径:rebase 保持线性、评审差异干净;merge 保留时间线、无需强推;团队需要统一约定。

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

分支同步策略是什么

本地分支与主线同步有两种口径:rebase 把个人分支重放到最新主线之上,历史线性、评审 diff 干净;merge 把主线并入分支,保留真实时间线、无需强推。口径要统一并写进贡献指南,否则评审前才来回扯皮,同步动作反复做。

基本信息

rebase 同步线性历史;已推送的分支需要 --force-with-lease
merge 同步保留时间线;无强推需求
常见折中共享分支用 merge,个人分支用 rebase
默认行为git config pull.rebase 决定 git pull 用什么方式,团队可统一设置
安全前提强推前确认无人基于该分支继续工作,并先 fetch 检查远端新提交

典型使用场景

  • 评审前同步:个人分支 rebase 到最新主线,diff 只含自己的改动。
  • 多人共享开发分支:用 merge 保留彼此提交,避免改写他人历史。
  • 长期分支:定期 merge 主线,降低最终大合并的冲突量。
  • 流水线校验:检查分支落后主线太多时提醒同步。
  • 新人指导:把口径写进 CONTRIBUTING,减少评审中的临时要求。
  • 历史重写影响评估:确认开放中的 PR 都基于新历史后再通知继续。

两种写法

两种写法
git fetch origin
git rebase origin/main    # 线性:个人分支常用
git merge origin/main     # 保留时间线:共享分支常用
git log --oneline --graph -8
git config pull.rebase false   # git pull 缺省走 merge
git push --force-with-lease    # rebase 已推送分支后,用 lease 保底

两种口径对比

维度rebasemerge
历史形态线性保留分叉与合并点
评审体验diff 干净能看到同步过程
失败恢复靠 reflog/ORIG_HEAD无改写风险
推送要求需强推正常推送即可
把口径写进贡献指南(CONTRIBUTING),评审前的同步动作就不会反复拉扯。口径混用会让同一分支出现两种历史形态,评审者难以判断真实改动范围。冲突少时 rebase 一步到位;冲突多或多人共写文件时 merge 更稳妥——先把冲突完整解决一次,再考虑历史形态。

易错点

  • 共享分支上变基会改写他人已拉取的历史,协作立刻混乱;共享分支一律 merge。
  • 强推不带 --force-with-lease,可能覆盖他人刚推送的提交;上推前先 fetch。
  • 反复强推让评审差异视图频繁变化、行内评论变 outdated;合并前集中同步一次。
  • 长期不同步的分支拖到最后一次性合,冲突积压爆发;定期小步同步降低风险,并在评审模板里放同步检查项,rebase 出问题就 --abort 重来。

数据来源与参考

  • Git 官方文档:git-rebase(rebase 与 merge 的选择说明)
  • Pro Git 2nd Edition · 3.6 变基
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌