Stacked Diffs with git rebase —onto
6 months ago
- #git
- #stacked-diffs
- #version-control
- 堆叠式差异(或堆叠式PR)将大型功能拆分为多个相互依赖的小PR,便于代码审查
- 常规的`git rebase`可能导致提交重复或冲突,不适用于堆叠分支
- `git rebase --onto <新基> <旧基> <分支>`可干净地重定基依赖分支,避免引入多余提交
- 标记分支(如`feature-2-base`)用于记录父分支先前状态,确保准确重定基
- 首次同步步骤:先重定基父分支(`feature-1`),再用`--onto`重定基依赖分支(`feature-2`),最后更新标记分支
- 当main分支更新时重复同步流程:重定基父分支→重定基依赖分支→更新标记
- 使用交互式重定基(`git rebase -i main`)清理已合并到依赖分支的功能提交
- 由于重定基会改变提交哈希,必须使用强制推送(`git push --force-with-lease`)
- 严格遵守标记分支规范是避免同步问题的关键
- 建议将堆叠差异控制在2-3层以内,以平衡优势和维护成本