首页/开发/Git 与协作速查/git rebase --keep-base 复用原合并基础
合并变基与冲突71 条

git rebase --keep-base 复用原合并基础

保持原分支的合并基础不变,只重放本分支提交;用于「上游有新提交但不想改变分叉点」的同步场景。

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

keep-base 复用原合并基础

git rebase --keep-base(Git 2.24 起)保持分支原本的合并基础不变,只把本分支的提交重放到上游:用于「上游有新提交、但不想移动分叉点」的同步场景。普通 rebase 会把分支搬到上游顶端,--keep-base 则让分叉点留在原处,便于对比变更集;代价是分支仍基于较旧代码,长期使用会累积集成风险。

基本信息

用途以原 merge-base 为基点变基
语法git rebase --keep-base <上游>
版本Git 2.24 起支持
对比普通 rebase 把分叉点移到上游顶端,--keep-base 保持不动
适用需要稳定对比变更集的场景

典型使用场景

  • 变更集对比:评审要看清本分支相对分叉点的全部提交
  • 长周期分支同步:临时跟上上游最新修复,但不改变基线
  • 演练变基:先保持基点重放,确认冲突处理方式再决定正式变基
  • 教学演示:保留分叉点展示分支与主干的差异结构
  • 发布冻结期:同步上游修复但保持评审基线不漂移

常用示例

常用示例
git merge-base main feature      # 记录当前分叉点
git switch feature
git rebase --keep-base main      # 保持分叉点,重放分支提交
git merge-base main feature      # 验证分叉点未移动
git log --oneline main..feature  # 查看分支独有提交

两种变基对比

维度普通 rebasekeep-base
分叉点移到上游最新保持原合并基础
适用常规同步与前瞻对比变更集、演练
风险正常集成风险长期使用会落后于上游
与普通 rebase 相比,--keep-base 不会把分支移到上游顶端:合并基础位置不漂移,便于对比,但不会替你减少集成差异。
不熟悉时优先用常规 rebase:--keep-base 是解决特定问题的工具(基点漂移导致对比困难),不是日常默认选项。
团队文档要写清用途:否则成员容易把它当常规同步命令,长期停在旧基点而不自知。

易错点

  • 长期停留在旧基点:分叉点不前进意味着集成延迟,定期仍要做常规同步
  • 误当常规 rebase 用:以为已同步到最新,实际只是重放了提交,上游新提交没有进来,可用 feature 与 main 双向区间核对
  • 变基后强推:分支被重写后推送需要强推,团队要遵守分支协作约定
  • 冲突语义误解:重放时的冲突来自原分叉点与新内容的差异,解决方式与常规变基略有不同,先小范围演练再批量处理

数据来源与参考

  • Git 官方文档:git-rebase(--keep-base)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌