git合并 --no-ff 的作用?
在Git中,--no-ff参数用于合并分支时禁止快进(Fast-Forward)模式,强制创建一个新的合并提交。以下是详细说明:
作用:git merge --no-ff
禁止快进合并 :即使当前分支可以快进到目标分支(即没有分叉),也会创建一个新的合并提交节点。
保留分支历史:在提交历史中明确记录分支的存在和合并操作,使历史更清晰。
如果你不知道合并的时候有没有加上 --no-ff ,那你大概率就是没加
快进(Fast-Forward)模式
作用:
快进(Fast-Forward)是 Git 合并分支时的一种默认行为,当目标分支的提交历史直接领先于当前分支,且没有分叉时,Git 会直接将当前分支的指针(HEAD)移动到目标分支的最新提交,不会生成新的合并提交。
本质上,这是一种"指针直接前移"的操作,保持提交历史的线性。
为什么git合并要加--no-ff ?
明确合并记录
快进合并(不加--no-ff)会直接移动分支指针,导致提交历史呈线性,无法区分是普通提交还是合并操作。使用--no-ff会生成一个合并提交,明确标记分支合并点。
保留上下文信息
合并提交的日志可以包含分支名称(如Merge branch 'feature'),方便后续追踪功能来源或修复的代码。
简化回滚操作
如果合并后发现问题,可以通过回滚合并提交快速撤销整个分支的改动,而非逐个提交回退。
不加--no-ff的风险
丢失分支历史
快进合并后,分支的提交历史与主分支线性融合,难以从历史中看出曾存在过的分支结构。
调试困难
若某功能引入问题,无法快速定位到合并点,可能需要遍历多个提交才能找到问题根源。
不同编辑器、合并方式下增加 --no-ff方式
1. 全局配置默认禁用
步骤一:
.gitconfig 文件增加两行配置
[merge]
ff = false
步骤二:
cmd窗口运行git config --global merge.ff false
# 所有合并默认禁用快进
2. 命令行合并示例
git merge --no-ff <branch>
3. WebStorm
4. Sourcetree

5. GitHub Desktop
.gitconfig 文件增加两行配置
[merge]
ff = false
