git rebase -i 是什么
git rebase -i 会打开编辑器,列出从指定基点之后的提交清单(todo 列表),每行前面是一条指令。你可以在清单里重排顺序、合并提交、改写信息或删除提交,保存退出后 Git 按清单逐条重放。它是整理分支历史的标准入口。
清单怎么读
清单自上而下按时间顺序排列,默认指令都是 pick。把某行的 pick 换成 reword、edit、squash、fixup、drop,就能改变对该提交的处理方式。基点选择要留意:git rebase -i HEAD~5 表示最近五条,git rebase -i origin/main 表示这条分支上所有还没进主干的提交。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git rebase -i <基点> |
| 基点写法 | HEAD~N 或上游分支名 |
| 默认指令 | pick,保留该提交 |
| 中断处理 | --continue 继续,--abort 放弃 |
| 辅助开关 | --autosquash 自动整理 fixup 提交 |
典型使用场景
- 合并零散提交:把「改了又改」的多条提交压缩成一条
- 改写提交信息:纠正错别字或补充背景说明
- 删除误提交:把调试用的临时提交从历史里去掉
- 调整顺序:让提交按逻辑顺序排列,便于评审
- 拆分提交:用 edit 停在某条提交上,再把它拆成两条
常用示例
常用示例
git rebase -i HEAD~5 # 整理最近五条提交
git rebase -i origin/main # 整理尚未合入主干的提交
git rebase -i --autosquash origin/main # 自动吸收 fixup 提交
git rebase --continue # 处理完当前条目后继续
git rebase --abort # 整体放弃,恢复原状
git log --oneline -10 # 整理后核对结果常用 todo 指令
| 指令 | 作用 | 常见场景 |
|---|---|---|
| pick | 保留该提交 | 默认动作 |
| reword | 保留改动,只改提交信息 | 修正描述 |
| edit | 重放后暂停 | 拆分提交、补文件 |
| squash | 与前一条合并并编辑信息 | 整合零散提交 |
| fixup | 与前一条合并并丢弃本条信息 | 琐碎修补 |
| drop | 删除该提交 | 清理临时提交 |
交互式变基改写的是本地历史,会生成全新的提交哈希。已经推送并被他人使用的分支上不要这么做,除非团队明确允许强推。
基点写错会把不该重放的提交一起卷进来。动手前先用 git log --oneline 确认范围,再执行交互式变基。
清单里指令写错时,保存退出会立刻报错并重新打开编辑器,不会损坏仓库,改回来即可。想临时退出用 --abort。