git merge --no-ff 禁用快进
--no-ff(no fast-forward)禁止快进合并,强制创建合并提交。
基本用法
Bash
# 禁用快进合并
git merge --no-ff <branch>
# 禁用快进并指定提交信息
git merge --no-ff -m "合并功能分支" <branch>
快进 vs --no-ff
Bash
快进合并(默认):
main: A → B → C → D → E
↑
(指针直接移动)
--no-ff 合并:
main: A → B → C → M
↗
feature: D → E
(创建合并提交)
使用示例
Bash
# 合并功能分支(禁用快进)
git checkout main
git merge --no-ff feature/login
# 输出
Merge made by the 'recursive' strategy.
src/login.go | 50 +++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
create mode 100644 src/login.go
为什么要用 --no-ff
| 优点 | 说明 |
|---|---|
| 保留分支历史 | 清晰看到功能分支的存在 |
| 易于追溯 | 知道某功能在哪次合并引入 |
| 易于回滚 | 整个功能可以一次性撤销 |
| 团队协作 | 多人开发历史更清晰 |
--no-ff 适用场景
| 场景 | 原因 |
|---|---|
| 功能分支合并 | 保留功能开发历史 |
| 团队项目 | 清晰展示协作过程 |
| 长期分支 | 保持历史可追溯 |
| 发布版本 | 标记重要合并点 |
对比表
| 特性 | 快进合并 | --no-ff |
|---|---|---|
| 合并提交 | 无 | 有 |
| 分支历史 | 隐藏 | 保留 |
| 回滚难度 | 困难 | 简单 |
| 历史可读性 | 线性简洁 | 结构清晰 |
查看合并历史
Bash
# 图形化显示分支历史
git log --oneline --graph --all
# --no-ff 后的输出
* abc123 (HEAD -> main) Merge feature/login
|\
| * def456 (feature/login) 添加登录功能
|/
* ghi789 初始化项目
配置默认禁用快进
text
# 对特定分支设置
git config branch.main.mergeoptions "--no-ff"
# 全局设置(不推荐)
git config --global merge.ff false
功能分支合并推荐使用 --no-ff,保持历史清晰可追溯。
要点总结
- --no-ff 强制创建合并提交
- 保留分支历史,便于追溯
- 功能分支合并推荐使用
- 回滚整个功能更方便
- 团队项目历史更清晰
📝 发现内容有误?点击此处直接编辑