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 参数 强制产生合并提交