首页/开发/Git 与协作速查/交互式变基重排提交顺序
合并变基与冲突71 条

交互式变基重排提交顺序

调整 todo 清单行的顺序即可改变提交应用顺序;用于把相关提交聚在一起,但要注意提交间可能存在依赖。

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

重排提交顺序是什么

在 git rebase -i 的待办清单里上下移动整行,就能改变提交的应用顺序。它常用于把同主题的提交聚在一起、把「修复上一个提交」的改动挪到正确位置。风险在于提交之间可能存在依赖:后一个提交的代码可能建立在前面提交之上。

基本信息

作用改变提交在历史中的先后顺序
操作方式在编辑器里上下移动整行,保存退出后按新顺序重放
常见动机把同一主题的提交聚拢,方便评审与回溯
主要风险重排后中间状态可能编译不过或测试不通过
冲突处理重放遇到冲突逐个解决,然后执行 git rebase --continue

典型使用场景

  • 提评审前整理同主题提交,让历史读起来是连贯的一步步
  • 把「修正上一个提交」的改动挪到被修正的提交之后
  • 把文档修改与代码修改分成两组,便于分类审阅
  • 为后续压缩提交做准备,先把相关提交聚在一起
  • 让待办清单顺序与实际开发顺序一致,方便他人理解

常用示例

常用示例
git rebase -i origin/main         # 打开待办清单
# 在编辑器中直接上下移动整行即可改顺序,例如:
# pick a1b2c3 feat: 新增登录接口
# pick d4e5f6 fix: 修正上一个提交的拼写
git rebase --continue             # 出现冲突并解决后继续重放
git rebase --abort                # 顺序改错时中止,回到操作前状态
git log --oneline -8              # 核对重排后的实际顺序

重排常见问题

情况表现处理
后续提交依赖前面改动中间提交编译失败把有依赖的提交保持在后面
重放产生冲突变基暂停等待解决逐块解决后继续,必要时中止
位置挪错历史顺序不符合预期用 reflog 找回原状态重做
重排属于重写历史:重放后每个提交的哈希都会变化,之后推送远端需要强推,并且要与正在使用该分支的同事打招呼。
不要在已经共享给多人的分支上随意重排:他人基于旧提交的改动会失去共同祖先,合并时出现成倍的重复冲突。

易错点

  • 在编辑器里误删或整行复制,导致提交丢失或重复,保存前先核对清单的行数与内容
  • 把有代码依赖的提交挪到前面,中间状态无法编译,用二分排查问题时会被误导到错误的提交
  • 重排后没同步远端与协作方,队友基于旧历史继续开发,合并冲突成倍增加
  • 把重排当作改内容的捷径:重排只改顺序,改动内容仍需重新编辑提交,混淆两者容易产生意外结果

数据来源与参考

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