git merge --no-ff <branch> 与 git merge <branch> 的区别
核心区别
git merge <branch>:
- 默认使用
Fast-forward模式(若可行) - 不创建额外的合并提交记录
- 合并后看不出曾经存在过分支
git merge --no-ff <branch>: - 强制创建一个新的合并提交
- 即使可以
Fast-forward也会生成合并记录 - 保留完整的分支历史信息
合并前 (两种方式相同的初始状态)
bash
A---B---C (master)
\
D---E (branch)
Fast-forward模式合并后 (git merge)
bash
A---B---C---D---E (master)
No Fast-forward模式合并后 (git merge --no-ff)
bash
A---B---C-------M (master)
\ /
D---------E
选择建议: 临时分支用默认模式,重要功能分支用--no-ff以保留历史。
注:图中A、B、C、D、E分别代表不同的提交。B是从A创建分支的共同起点,而不是B和D是同一笔提交。