Git 提交合并(Squash)操作复盘总结


✅ 场景目标

把某个提交(如 6fc6e37)及其之后的所有提交合并成一条提交,保留历史,简化 log。


🧭 思路总览

Git 只能按提交拓扑结构操作,不能直接按时间合并。正确做法如下:


✅ 操作步骤

1️⃣ 找到合并起点的前一个提交

  • git log --oneline --date=isogit log --graph 找到目标提交(如 6fc6e37)的前一个提交(如 8d1bacb)。

2️⃣ 切换到目标分支

1
git checkout main

3️⃣ 软重置到前一个提交

1
git reset --soft 8d1bacb
  • 这样会把从 6fc6e37 开始到最新的所有更改变成未提交状态。

4️⃣ 新建一个合并提交

1
git commit -m "合并 Cloudflare Workers 相关提交"
  • 可以整理多个提交说明合并进 message。

5️⃣ 强推远程(如已推送过)

1
git push origin main --force

🧼 效果验证

  • git log --oneline 检查历史是否简化
  • git log --graph 检查提交结构
  • git status 检查无未提交内容

⚠️ 注意事项

项目 注意点
重写历史 一定会改变 Git 提交 ID,不可逆
多人协作 强推前要先告知团队,避免他人拉取冲突
推荐备份 操作前创建备份分支:git checkout -b backup-before-squash

🧠 总结口诀

🔁 找前一条 → 软重置 → 合新提交 → 强推远端

「软回起点,合为一弹,历史整洁,强推不慌」


如需自动化脚本或 .sh 工具,可随时告知!