首页/开发/Git 与协作速查/git rebase -i 交互式整理提交
合并变基与冲突71 条

git rebase -i 交互式整理提交

在编辑器中列出待重放提交的 todo 清单,可重排、合并、改写、删除提交,是整理分支历史的标准入口。

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

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。

易错点

  • 基点写错会把不该重放的提交卷入,操作前用 git log --oneline 确认范围
  • 交互式变基改写本地历史,对已推送分支要先取得团队同意再强推
  • squash 与 fixup 都作用于前一条,调整顺序后要重新检查相邻关系
  • 清单里 drop 掉提交会连同改动一起消失,确认内容已保留在别处再删除

数据来源与参考

  • Git 官方文档:git-rebase(INTERACTIVE MODE)
  • Pro Git 2nd Edition · 7.6 重写历史
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌