【Git】merge 分类

在 Git 里,merge 的本质是把两个分支的历史合并到一起。常见的合并方式主要有以下几种:


🔹 1. Fast-forward Merge(快进合并)

特点

  • 当目标分支落后于当前分支,且没有新的分叉时,可以直接把指针"快进"到目标分支的最新提交。
  • 历史是 线性的,不会生成新的合并提交。

命令示例

bash 复制代码
git checkout main
git merge feature

如果 main 没有新的提交,就会直接快进。

适用场景

  • 分支未分叉,保持历史干净。
  • 小功能分支合并时常用。

🔹 2. 3-way Merge(三方合并)

特点

  • 当两个分支有分叉时,Git 会找到 共同祖先(merge base) ,再把三个提交(baseourstheirs)进行合并。
  • 会生成一个新的 merge commit

命令示例

bash 复制代码
git checkout main
git merge feature

如果 mainfeature 都有新的提交,就会触发三方合并。

适用场景

  • 分支开发时保留完整的历史轨迹。
  • 团队协作时更常用。

🔹 3. No Fast-forward Merge(禁止快进合并)

特点

  • 即使可以快进,Git 也会强制生成一个 merge commit,从而保留分支合并点。

命令示例

bash 复制代码
git checkout main
git merge --no-ff feature

适用场景

  • 团队协作时希望明确看到功能分支的合并记录。
  • 有利于代码审查和回溯。

🔹 4. Squash Merge(压缩合并)

特点

  • 把分支上的多个提交 压缩成一个提交,然后合并到目标分支。
  • 历史更干净,但不保留分支的详细提交记录。

命令示例

bash 复制代码
git checkout main
git merge --squash feature
git commit -m "feat: add feature"

适用场景

  • 功能分支提交很多,但合并到主干时只想保留一个提交。
  • 提交历史要求简洁。

🔹 5. Octopus Merge(章鱼合并)

特点

  • 一次合并多个分支(多于两个)。
  • 不适合有冲突的复杂场景。

命令示例

bash 复制代码
git checkout main
git merge feature1 feature2 feature3

适用场景

  • 合并多个无冲突的分支。
  • 一般在自动化脚本中才会用。

✅ 总结表格

类型 是否生成新提交 是否保留分支历史 适用场景
Fast-forward ❌ 否 ❌ 否(线性历史) 简单合并,分支未分叉
3-way merge ✅ 是 ✅ 是 团队协作,保留历史
No-ff merge ✅ 是 ✅ 是 保留分支合并点
Squash merge ✅ 是(压缩) ❌ 否 保持历史干净
Octopus merge ✅ 是 ✅ 是 一次合并多个分支
相关推荐
vistaup10 小时前
windows git 更新当前目录下所有的文件(非递归)
windows·git
王码码203511 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
Irene199115 小时前
Git 命令汇总表(基于一次完整的 Git 实战经验整理,涵盖从安装配置到日常开发、问题排查的所有常用命令)
git·常用命令
q54314708716 小时前
Redis Desktop Manager(Redis可视化工具)安装及使用详细教程
redis·git·bootstrap
素雨迁喜17 小时前
Linux平台下git工具的使用
linux·运维·git
Irene199119 小时前
Windows环境,VS Code 中 Git 配置指南
git·基础配置
Yang-Never20 小时前
AI Code -> Windows电脑安装Claude
开发语言·windows·git
Irene199120 小时前
2026 前端开发 Windows 安装 Git 配置指南(有实际安装过程参考:适配版本 the latest 2.53.0(2) x64 )
前端·windows·git
早起的年轻人20 小时前
告别Git仓库臃肿:一招解决Maven target目录误提交问题
java·git·maven
悠然大月季2 天前
git 怎么导出提交历史,文件是乱码
git·git导出历史记录·git导出历史乱码