git 使用 squash merge
🔹 1. 什么是 squash merge
squash merge 是 Git 合并的一种方式:
- 将一个分支(通常是 feature branch)上的 多个提交 合并成 一个新的提交
- 新提交的作者默认是执行 merge 的人
- 合并完成后,master(或目标分支)上只会看到这一个 commit
命令示例:
git checkout master
git merge --squash feature-branch
git commit -m "Add new feature" // 如果需要保留原作者信息,可以 git commit --author="Original Dev <dev@example.com>" -m "Add new feature"
🔹 2. 特点
| 特点 | 说明 |
|---|---|
| 提交数 | feature-branch 的多个提交合并成一个新的 commit |
| 作者信息 | 默认是执行 merge 的人;可用 --author="..." 保留原作者 |
| 历史整洁 | master 上不会有很多小提交,提交历史更简洁 |
| 保留改动 | 所有 feature-branch 的改动都会包含在新 commit 中 |
| feature-branch 不变 | 原分支的提交依然存在,不受影响 |
🔹 3. 使用场景
- 提交历史需要整洁:例如 master 或 main 分支上不希望有每个小提交
- 功能完成后合并:把一整个功能模块作为一个 commit 提交到主分支
- 临时修复或小功能:多个零散提交合并成一个完整的逻辑提交
⚠️ 注意:如果团队希望保留每个小提交的作者信息或历史,不适合使用 squash merge
🔹 4. 和普通 merge 对比
| 对比项 | 普通 merge | squash merge |
|---|---|---|
| 提交数 | 保留 feature-branch 的每个提交 | 所有提交合并成一个新的 commit |
| 历史完整性 | 历史完整,可追溯每个小提交 | 历史压缩,只保留一个 commit |
| 作者信息 | 保留每个 commit 的原作者 | 默认是执行 merge 的人,可手动指定 author |
| 生成 merge commit | 会生成一个 merge commit | 不生成 merge commit(除非手动) |
| 适用场景 | 协作开发,保留完整历史 | 发布或整合功能,保持 master 历史干净 |
🔹 5. 总结建议
- 保留原始提交历史 → 用普通 merge
- 希望 master 干净整洁 → 用 squash merge,并在需要时指定作者
