跳到主要内容

用 git squash 合并多个 commit

· 阅读需 2 分钟
uMnRQ0

作用:将多个连续提交合并为 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 个新提交。