Git 合并多次提交记录实战

日常开发中,我们经常在同一个分支上连续提交多次(修 typo、补测试、小调整等),合并到主分支前希望把这段历史整理成一条清晰的提交。本文介绍如何把多次提交合并成一次,并说明合并后历史会怎样变化。


一、先看清当前分支的提交记录

合并前,先确认要合并的是哪几条提交。

简洁列表(推荐):

bash 复制代码
git log --oneline

带分支图、看最近 20 条:

bash 复制代码
git log --oneline --graph -20

示例输出:

复制代码
a1b2c3d (HEAD -> feature/login) 修复登录页样式
e4f5g6h 补充单元测试
i7j8k9l 实现登录接口
m0n1o2p 添加登录页组件
p3q4r5s 初始化项目 (main)

这里的「最近几次」指的是当前所在分支 上、从 HEAD 往前数的提交。HEAD~5 就表示当前分支上最近 5 次提交。


二、合并后历史会变少吗?

会。合并(squash)后,这段历史里的提交条数会变少。

  • 合并前:例如最近 5 条提交 → 历史里有 5 条记录。
  • 合并后:这 5 条被压成 1 条 → 这段只算 1 条记录。

注意:被合并掉的提交的 commit hash 会变,相当于重写了这段历史。若已经推送到远程,需要配合强制推送(见下文)。


三、方法一:交互式变基(可精细控制)

适合想挑选要合并的提交、调整顺序或编辑说明的场景。

1. 合并当前分支最近 N 次提交

例如合并最近 5 次:

bash 复制代码
git rebase -i HEAD~5

2. 在编辑器中修改指令

会打开类似下面的列表:

复制代码
pick p3q4r5s 初始化项目
pick m0n1o2p 添加登录页组件
pick i7j8k9l 实现登录接口
pick e4f5g6h 补充单元测试
pick a1b2c3d 修复登录页样式

从第 2 条起pick 改成 squash(或简写 s),保留第 1 条为 pick

复制代码
pick p3q4r5s 初始化项目
squash m0n1o2p 添加登录页组件
squash i7j8k9l 实现登录接口
squash e4f5g6h 补充单元测试
squash a1b2c3d 修复登录页样式

保存并关闭编辑器。

3. 编写合并后的提交说明

接下来会再弹出一个编辑器,把多条提交说明合并成一条,例如:

复制代码
# 请修改本次合并的提交说明,以 '#' 开头的行会被忽略
feat: 登录功能

- 添加登录页组件
- 实现登录接口
- 补充单元测试
- 修复登录页样式

保存后,这 5 条提交就变成 1 条。

4. 若已推送到远程

历史被重写,需要强制推送(建议用 --force-with-lease):

bash 复制代码
git push --force-with-lease

四、方法二:软重置 + 重新提交(最简单)

不打开交互界面,直接把「最近 N 次提交」撤销成未提交的改动,再一次性提交。

示例:把最近 3 条合成 1 条

合并前:

复制代码
a1b2c3d 修复登录页样式
e4f5g6h 补充单元测试
i7j8k9l 实现登录接口

执行:

bash 复制代码
# 撤销最近 3 条提交,改动保留在暂存区
git reset --soft HEAD~3

# 用一条新提交包含所有改动
git commit -m "feat: 登录功能(组件、接口、测试与样式修复)"

合并后:

复制代码
x9y8z7w feat: 登录功能(组件、接口、测试与样式修复)

同样,若已推送过,需要:

bash 复制代码
git push --force-with-lease

五、两种方式对比

方式 适用场景
交互式变基 想选择合并哪些提交、调整顺序、保留/编辑多条说明
软重置 + 提交 只关心「最近 n 条合成 1 条」,操作最少

六、小结

  • git log --oneline(或 --graph -n)查看当前分支的提交记录。
  • 「最近 5 次」= 当前分支上 HEAD~5,不是别的分支。
  • 合并后提交次数会变少 ,对应历史被重写,已推送时需 git push --force-with-lease
  • 需要精细控制用 git rebase -i HEAD~n;图省事用 git reset --soft HEAD~n + git commit

按需选一种方式,即可在合并到主分支前把本地多次提交整理成一条清晰记录。

相关推荐
那年窗外下的雪.1 天前
AIDC 学习日志|第 21 天|EVPN 多归属故障演练与中断窗口定位
网络·git·学习
玖石书1 天前
Git Submodule 完全指南:从添加到日常维护的常规操作全流程
大数据·git·elasticsearch
微尘寒风2 天前
git创建版本库
git
console.log('npc')2 天前
Git 冲突与 AI 协助指南
前端·人工智能·git·大模型
重生之我来学Python2 天前
Git-SVN 混合开发,从入门到精通!
开发语言·git·svn·github
笨笨饿2 天前
#137_死机恢复现场_Armino平台AP系统swd调试
git·python·stm32·单片机·嵌入式硬件·物联网·vim
King of fraud2 天前
Git 入门:从零开始的版本控制之旅
git
AI大模型-小华2 天前
Codex CLI第一次怎么用?从安装到读取本地项目完整教程
git·node.js·ai编程·开发工具·代码分析·codex·codex cli
2401_861678622 天前
Git 在 Windows 使用
windows·git·elasticsearch
青禾8373 天前
Git 与 SVN 完全指南:从集中式到分布式的版本控制
分布式·git·svn