Git Merge 合并分支问题总结
问题描述
执行 git merge fea/douguan 合并分支时,没有提示解决冲突,提交记录中也没有合并日志。
原因分析
当目标分支(当前分支)没有新的提交时,Git 默认会执行 快进合并(Fast-forward),直接将指针移动到源分支的最新提交。
快进合并示意图
合并前:
A---B---C (当前分支)
\
D---E (fea/douguan)
合并后(直接移动指针,无合并提交):
A---B---C---D---E (当前分支)
如何验证合并状态
# 查看当前分支
git branch
# 查看提交历史
git log --oneline -10
# 查看图形化提交历史
git log --oneline --graph -10
强制产生合并提交
使用 --no-ff 参数禁用快进合并:
# 撤销刚才的合并(如果还没推送)
git reset --hard HEAD@{1}
# 强制创建合并提交
git merge --no-ff fea/douguan
合并提交示意图
A---B---C---M (当前分支,M 是合并提交)
\ /
D---E (fea/douguan)
冲突触发条件
冲突只在 两个分支修改了同一文件的同一部分 时才会出现:
| 情况 | 结果 |
|---|---|
| 修改不同文件 | 自动合并,无冲突 |
| 修改同一文件的不同部分 | 自动合并,无冲突 |
| 修改同一文件的同一部分 | 提示解决冲突 |
合并结果对照表
| 场景 | 结果 |
|---|---|
| 当前分支无新提交 | 快进合并,无合并提交 |
| 当前分支有新提交,无冲突 | 自动合并,有合并提交 |
| 当前分支有新提交,有冲突 | 提示解决冲突 |
使用 --no-ff 参数 |
强制产生合并提交 |

...