git rebase -i 用于整理本地提交,通过 squash、reorder、edit 等操作将零散提交压缩为逻辑清晰、语义明确的少数提交;需确保工作区干净、基于最新主干变基,编辑时修改 pick 为 squash/fixup/reword/drop/edit;变基后需 --force-with-lease 强推。

用 git rebase -i 整理本地提交,核心是把零散、重复或带调试信息的提交压缩(squash)、重排(reorder)或修正(edit),最终只保留逻辑清晰、语义明确的少数几个提交推送到主干。
明确目标分支并确保工作区干净
操作前确认当前在你要整理的本地分支上,且没有未提交的修改或未暂存的文件。运行 git status 检查,如有改动先 git add + git commit 或 git stash 保存。
- 推荐基于最新
main(或master)做交互式变基:先git checkout your-branch,再git rebase -i main - 如果只是整理最近 5 次提交,也可用
git rebase -i HEAD~5 - 避免对已推送到远程且他人可能基于其开发的提交做变基,否则会引发协作冲突
在编辑器中选择操作指令
执行命令后会打开默认编辑器(如 Vim 或 VS Code),列出从旧到新的一组提交,每行以 pick 开头。你可以修改每行开头的动词来控制处理方式:
-
pick:保留该提交(默认),可改写提交信息(光标移到行尾按
i编辑) -
squash(或
s):将当前提交合并到前一个pick提交中,合并后会进入新编辑器让你重写组合后的提交信息 -
fixup(或
f):类似 squash,但直接丢弃当前提交的信息,不进二次编辑 -
reword(或
r):只修改当前提交信息,不改变代码 -
drop(或
d):彻底删除该提交(谨慎使用,尤其含关键修改时)
修正提交内容与信息(可选但推荐)
若某次提交有遗漏文件、错提了调试日志,或想微调代码,可用 edit(或 e)标记它。变基暂停后,你可:
- 用
git add/git rm补充或清理暂存区 - 必要时
git commit --amend修改最后一次暂存结果 - 完成后运行
git rebase --continue继续后续步骤
注意:edit 后必须手动继续,否则变基处于挂起状态,git status 会提示“you are currently rebasing”。
推送整理后的分支(需强制)
变基本质是生成一批新提交(SHA-1 改变),原提交被废弃。若该分支已推送到远程,需用 --force-with-lease 覆盖:
-
git push --force-with-lease origin your-branch(安全首选,防止覆盖他人新推送) - 切勿用
--force,除非你完全确定远程无他人协作更新 - 如果团队约定禁止强制推送,应先沟通,或改用
git merge --no-ff配合常规提交
整理不是为了“好看”,而是让每次提交都代表一个完整、可测试、可回溯的逻辑单元——比如“添加用户登录校验”“修复密码重置空指针”,而不是“临时注释”“又修了一个 bug”。


















