Git 分支合并的几种模式
合并分支时不只有“能合进去就好”。不同的合并模式会留下截然不同的提交拓扑,影响后续审计、回滚与分支管理。以下总结整理 Azure DevOps 中提供,也可以在纯 Git 操作中复现的四种主要模式,并给出适用场景。
两种底层形态:Fast-forward 与 No Fast-forward
所有合并动作最终都落在这两种形态之一:
-
Fast-forward (FF)
- 条件:目标分支(如
dev)没有新的提交,当前分支只是落后。 - 行为:Git 直接把当前分支指针前移到目标分支的最新提交,不生成新的 merge commit。
- 命令:默认
git merge在满足时会自动 fast-forward;git merge --ff-only可强制只接受此形态。 - 场景:纯同步、保持线性历史、自动化合并(机器人同步主干等)。
- 条件:目标分支(如
-
No Fast-forward (No-FF)
- 条件:两个分支各自有提交,无法只靠前移指针。
- 行为:Git 创建一个新的 merge commit,把两条历史接在一起,保留拓扑。
- 命令:
git merge --no-ff强制生成 merge commit,即使原本可以 fast-forward。 - 场景:需要记录“这个功能分支曾存在”或审计需要完整的父子关系。
Rebase 与 fast-forward:git rebase/git pull --rebase 会先把当前分支的提交移动到目标分支之后,使其具备 fast-forward
条件,然后再前移指针,因此历史看起来是一条直线。如果 rebase 前有未提交的修改,需要借助 git stash 暂存。
Merge (No Fast-forward)

最常被称为“保留分叉”的模式:无论本来能不能直接前进,强制额外生成一个 merge commit。需要注意,Git 默认