如何把最近 N 个提交压缩成一个

压缩最近 N 个提交:git rebase -i HEAD~N,把除第一条外的 pick 全改成 squash 或 fixup,保存后编辑最终提交信息。已推送需 --force-with-lease 强推;纯本地操作零风险。

最佳实践
Git 提交历史与版本恢复示意

交互式 rebase 搞定:git rebase -i HEAD~N(N 是要压缩的提交数),编辑器里第一条保留 pick,后面全部改成 squash(或 fixup),保存退出后编辑合并的提交信息即可。

操作示例:压缩最近 3 个

git rebase -i HEAD~3

编辑器中(最旧在上):

pick a1b2c3d 实现登录接口
squash e4f5g6h 修个拼写
squash i7j8k9l 又改了下注释

保存 → 弹出新编辑器写最终提交信息 → 完成。三个提交变成一条。

squash 和 fixup 的选择

  • squash:合并后让你编辑信息(几条原文都列出供取舍);
  • fixup:直接丢弃被合并提交的信息,只留第一条的——修 typo 类提交用 fixup 最利落。

替代方案:reset --soft

提交信息想完全重写、改动全在一个文件域时,这条路更快:

git reset --soft HEAD~3      # 3 个提交全回暂存区
git commit -m "实现登录接口"  # 重新提交为一个

常见问题(FAQ)

Q:压缩已推送的提交?

可以但需 git push --force-with-lease 强推。分支有别人协作就别压了,或者用 GitHub 的 Squash merge 在合并时压。

Q:rebase -i 里把顺序搞乱了怎么办?

git rebase --abort 随时放弃重来。开始之前 git branch backup 打个保险也行。

Q:HEAD~N 里混着别人的提交(已拉过远程)?

千万别压别人的提交。git log origin/main..HEAD --oneline 先确认这 N 个全是你的。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台