用 git squash 合并多个 commit
· 阅读需 2 分钟

作用:将多个连续提交合并为 1 个新提交,简化提交历史。
1. 启动交互式变基
git rebase -i HEAD~N # 合并最近 N 个提交
# 或
git rebase -i <commit-hash>^ # 合并到指定提交(^ 表示该提交的前一个)
2. 标记需合并的提交
在打开的编辑器中:
- 保留第一个提交前的
pick
- 将后续提交前的
pick
改为squash
(或简写s
)
示例:pick a1b2c3d 提交1
squash e4f5g6h 提交2 # 合并到提交1
squash i7j8k9l 提交3 # 合并到提交1
3. 保存并编辑新提交信息
- 保存编辑器后,Git 会打开新页面
- 修改合并后的提交信息(默认包含所有原提交信息,可删除或重写)
- 保存退出
4. 解决冲突(如有)
- 若发生冲突:
# 1. 手动解决冲突
git add <冲突文件> # 标记为已解决
git rebase --continue # 继续变基 - 若想中止:
git rebase --abort
5. 强制推送(如已推送到远程)
git push --force # 覆盖远程历史
# 或更安全的选项
git push --force-with-lease
关键提示
- 适用场景:整理本地分支、PR/MR 前清理中间提交。
- 风险:强制推送会覆盖远程历史,确保分支未被他人使用。
- 替代方案:
git merge --squash
(合并分支时直接压缩,不保留原提交)。
✅ 完成!历史中的多个提交将被替换为 1 个新提交。