rebase --onto 是什么
git rebase --onto 用三个位置参数精确搬移提交:把「旧基点之后、指定分支之前」的那一段提交,重放到新的基线上。它解决的是普通 rebase 覆盖不到的场景,例如特性分支误开在错误的分支上,需要把这批提交整段摘出来接到正确的基线。写法为 git rebase --onto <新基线> <旧基点> <分支>,其中旧基点到分支之间是待搬移的区间。
基本信息
| 语法 | git rebase --onto <新基线> <旧基点> <分支> |
|---|---|
| 搬移范围 | 重放 (旧基点, 分支] 区间内的提交 |
| 常见场景 | 把误开分支上的提交移接到目标基线 |
| 前置 | 先备份分支或用 reflog 兜底 |
| 平台 | 任意 Git 客户端 |
典型使用场景
- 特性分支误从错误的分支切出,需要接到正确的基线
- 把一段提交从废弃分支迁移到新分支
- 调整提交的挂载位置,让历史拓扑更合理
- 配合 merge-base 精确算出「从哪开始搬」
- 拆分混乱的分支,把无关提交挪到别处
- 修复历史后再推送个人分支
- 把「先提交到主干」的临时提交挪到独立分支
常用示例
常用示例
git switch feature
# 把 feature 上「分叉自 main 之后」的提交搬到 develop
git log --oneline $(git merge-base main feature)..feature # 先预览
# 把误开分支上的提交移接到目标基线
git rebase --onto develop main feature
git log --oneline --graph -12 # 核对结果同一条命令的两种写法
同一条命令的两种写法
git rebase --onto develop $(git merge-base main feature) # 在 feature 分支上执行
git rebase --onto develop main feature # 显式指定三个位置参数先用 git log --oneline <旧基点>..<分支> 预览将被搬移的提交集合,确认条数与内容都对,再执行变基。
范围参数写反会把整条分支历史重放一遍,也可能把不该动的提交搬走;执行前一定预览集合,并保留一个备份分支或记录当前提交号。
执行前后的核对动作
- git status 确认工作区干净,避免变基被本地改动打断
- git log --oneline <旧基点>..<分支> 预览待搬移的提交
- git branch backup/<分支> 留一份备份,出事可直接回退
- 完成后 git log --oneline --graph 核对拓扑与条数