Git Squash Merge 使用指南
# Git Squash Merge 使用指南
# 一、什么是 squash merge
squash merge 是 Git 中一种:
只合并代码,不合并提交历史
的合并方式。
适用于:
- 个人开发分支
- 临时功能分支
- 不希望暴露开发过程
- 不希望远程出现大量 commit
- 想保持提交记录干净
# 二、为什么使用 squash merge
假设:
# huawei 分支
A---B
1
# dev 分支
A---B---C---D---E
1
其中:
- C D E 是自己开发过程中的提交
如果直接:
git merge dev
1
最终:
A---B--------M
\ /
C----D----E
1
2
3
2
3
远程会看到:
- 所有开发记录
- merge commit
- 分支关系
提交历史会越来越乱。
# 三、squash merge 的效果
执行:
git merge --squash dev
1
最终:
A---B---X
1
其中:
- X 是一个新的提交
- C D E 不会进入远程历史
效果相当于:
把 dev 的所有代码压缩成一次提交。
# 四、核心特点
| 特点 | squash merge |
|---|---|
| 合并代码 | ✅ |
| 合并 commit 历史 | ❌ |
| 产生 merge commit | ❌ |
| 提交记录干净 | ✅ |
| 适合个人开发 | ✅ |
# 五、推荐开发流程
# 1. 切换到公共分支
git checkout huawei
1
# 2. 拉取最新代码
git pull
1
确保本地分支最新。
# 3. squash 合并 dev
git merge --squash dev
1
执行后:
- 代码会进入暂存区
- 但不会自动 commit
- 不会生成 merge commit
# 4. 查看状态
git status
1
会看到:
Changes to be committed
1
说明代码已经进入暂存区。
# 5. 提交代码
git commit -m "新增xxx功能"
1
此时:
- 会生成一个全新的 commit
- 不会保留 dev 的历史记录
# 6. 推送远程
git push
1
远程只能看到:
新增xxx功能
1
看不到:
- dev 分支
- dev 的 commit
- merge 历史
# 六、完整操作示例
# 当前情况
# huawei
A---B
1
# dev
A---B---C---D---E
1
# 执行
git checkout huawei
git pull
git merge --squash dev
git commit -m "新增用户功能"
git push
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 最终结果
A---B---X
1
其中:
- X 包含了 C D E 的所有代码
- 但不会暴露开发过程
# 七、常见问题
# 1. squash merge 后为什么没有自动 commit?
因为:
git merge --squash
1
只会:
- 合并代码
- 放入暂存区
不会自动提交。
需要手动:
git commit
1
# 2. squash merge 会删除 dev 分支吗?
不会。
只是:
- 复制代码
- 不影响 dev 分支
# 3. squash merge 后还能继续开发吗?
可以。
dev 分支不会受到影响。
# 4. squash merge 会产生 merge commit 吗?
不会。
这是它最大的优点之一。
# 八、推荐使用场景
适合:
- 个人开发分支
- 功能开发分支
- 实验分支
- 临时分支
- 提交记录需要干净的项目
# 九、不推荐直接 merge 的原因
直接:
git merge dev
1
会:
- 暴露开发过程
- 出现大量 commit
- 出现 merge commit
- 提交记录混乱
尤其多人协作时:
Git 图会越来越复杂。
# 十、推荐命令速查
# squash merge
git merge --squash dev
1
# 提交代码
git commit -m "新增功能"
1
# 推送远程
git push
1
# 查看提交图
git log --oneline --graph
1
# 十一、最佳实践(推荐)
# 更新公共分支
git checkout huawei
git pull
# 合并个人开发代码
git merge --squash dev
# 提交
git commit -m "新增xxx功能"
# 推送
git push
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 十二、总结
| 方案 | 是否暴露开发历史 | 是否产生 merge commit | 提交记录 |
|---|---|---|---|
| merge | 会 | 会 | 复杂 |
| rebase | 会 | 不会 | 较干净 |
| squash merge | 不会 | 不会 | 最干净 |
# 十三、结论
对于:
- 本地个人开发分支
- 不想提交 dev 历史
- 希望远程提交干净
最推荐:
git merge --squash dev
1
编辑 (opens new window)
上次更新: 2026/05/11, 8:05:00