创见博客
Git 多个 commit 合并成一个,干净又优雅
七崽爱吃小饼干2026/04/21阅读 6

在日常开发中,我们常常会为了一个功能反复修改、频繁提交,最终留下一串细碎、零散的 commit。既不美观,也不利于代码回溯与版本管理。学会把多个 commit 合并成一个整洁的提交,是每个开发者必备的 Git 基础技能。

一、为什么要合并 commit

  • 提交历史更清晰:一个功能对应一个 commit,可读性大幅提升。
  • 方便代码 review:同事一眼就能看懂本次改动的整体目的。
  • 便于回滚与管理:回滚时只需操作一次,不会遗漏或误删。
  • 规范团队协作:保持主干分支历史干净整洁,减少冲突与混乱。

二、适用场景

  • 同一个功能拆成了多次小提交。
  • 中间包含调试、修复、删日志等临时 commit。
  • 准备合并到开发/主分支前,想整理提交记录。
  • 仅适用于自己的私有分支,未被他人拉取或公共分支慎用。

三、最常用方法:git rebase -i 交互式合并

1. 查看需要合并的提交

先查看最近提交,确定要合并几条:

bash
git log --oneline

2. 执行交互式变基

合并最近 N 条 commit:

bash
git rebase -i HEAD~N

例如合并最近 5 条:

bash
git rebase -i HEAD~5

3. 修改操作指令

进入编辑界面后,你会看到类似内容:

pick a1b2c3 feat: 添加分类接口
pick d4e5f6 fix: 修复参数错误
pick g7h8i9 chore: 删除调试日志

将除第一条外的 pick 改为 s(squash,压缩合并):

pick a1b2c3 feat: 添加分类接口
s d4e5f6 fix: 修复参数错误
s g7h8i9 chore: 删除调试日志

4. 保存并进入提交信息编辑

  • Vim 编辑器:按 i 进入编辑 → 修改完成按 Esc → 输入 :wq 保存退出。
  • 之后会进入 commit 信息编辑页,保留一条最终描述,其他注释掉(行首加 #)。
  • 再次保存退出,合并完成。

四、合并后推送到远程

如果已经推送到远程,需要强制覆盖(仅自己分支):

bash
git push -f

五、常见问题与安全操作

  • 操作出错想撤销:
    bash
    git rebase --abort
    
  • 公共分支不要强制推送,避免覆盖他人代码。
  • 合并前最好先拉取最新代码,减少冲突。

六、总结

合并 commit 本质是整理提交历史,让代码库更专业、更易维护。掌握 git rebase -i 这一条命令,就能应对绝大多数场景。养成“一个功能一个提交”的习惯,不仅提升个人开发规范,也能让团队协作更加高效顺畅。

无论是日常开发、提 MR 还是发布版本,干净的 commit 历史都会让你在团队中显得更专业、更可靠。

评论
0/100