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