news 2026/5/8 3:13:30

Git Merge命令介绍(把指定分支的提交历史合并到当前分支)经典合并、Fast-Forward快进合并FF Merge、三方合并、merge commit、squash merge、合并冲突

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git Merge命令介绍(把指定分支的提交历史合并到当前分支)经典合并、Fast-Forward快进合并FF Merge、三方合并、merge commit、squash merge、合并冲突

文章目录

  • Git Merge 完全指南:理解 Git 分支合并机制
  • 一、什么是 git merge?
    • merge 是“合并到当前分支”
  • 二、merge 的核心思想
  • 三、最经典的 merge 流程
  • 四、Fast-Forward Merge(快进合并)
    • 场景
  • 五、什么是 Three-Way Merge(三方合并)
  • 六、merge commit 是什么?
  • (补充)为什么要用 merge commit?
  • 七、git merge 常用命令
  • 1. 合并分支
  • 2. 不创建 Fast-Forward
  • 3. 只允许 Fast-Forward
  • 4. squash merge
  • 八、merge conflict(合并冲突)
    • 冲突产生原因
  • 九、冲突文件长什么样?
  • 十、解决 merge conflict
    • 1. 编辑冲突文件
    • 2. 标记已解决
    • 3. 完成 merge
  • 十一、放弃 merge
  • 十二、查看 merge 历史
    • 图形查看
    • 查看 merge commit
  • 十三、merge 与 rebase 的区别
    • merge
    • rebase
    • 如何选择?
      • 团队协作:
      • 个人 feature 整理:
  • 十四、merge 的最佳实践
  • 1. 小步合并
  • 2. merge 前先 pull
  • 3. 使用 Pull Request
  • 4. 重要分支使用 --no-ff
  • 5. 学会看 graph
  • 十五、merge 的本质理解(非常重要)
  • 十六、实际团队开发中的 merge 流程
    • 1. 创建功能分支
    • 2. 开发提交
    • 3. 同步主分支
    • 4. 合并 feature
    • 5. 删除 feature
  • 十七、总结

Git Merge 完全指南:理解 Git 分支合并机制

在日常 Git 开发中,分支(branch)是最核心的工作方式之一。

我们通常会:

  • 在 feature 分支开发功能
  • 在 bugfix 分支修复问题
  • 在 release 分支准备发布

而当开发完成后,就需要把这些修改“合并”回主线分支。

这时候就会使用:

gitmerge

git merge是 Git 中最重要的命令之一,它负责:

  • 合并分支历史
  • 整合代码修改
  • 保留开发轨迹
  • 构建团队协作流程

这篇文章将全面介绍:

  • git merge 的原理
  • merge 的工作流程
  • Fast-Forward 与 Three-Way Merge
  • merge conflict(合并冲突)
  • 常见 merge 策略
  • merge 最佳实践

一、什么是 git merge?

git merge用于:

把另一个分支的提交历史整合到当前分支。

例如:

gitmerge feature/login

意思是:

feature/login分支的修改合并到当前所在分支。

注意:

merge 是“合并到当前分支”

很多新人容易理解反。

比如:

gitcheckout maingitmerge feature/login

真正含义是:

把 feature/login 合并进 main

不是反过来。


二、merge 的核心思想

Git 的 merge 本质上是:

寻找共同祖先(merge base) 然后整合两个分支的差异

Git 会:

  1. 找到两个分支共同祖先
  2. 对比双方修改
  3. 自动合并代码
  4. 创建新的 merge commit(某些情况不会)

三、最经典的 merge 流程

假设:

main └── A──B──C | feature └──D──E

现在:

gitcheckout maingitmerge feature

merge 后:

main └── A──B──C────M \ / D──E

这里:

  • M就是 merge commit
  • Git 保留了两条历史
  • merge commit 有两个 parent

这是 Git 最标准的分支整合方式。


四、Fast-Forward Merge(快进合并)

这是最常见的一种 merge。

场景

A──B──C main \ D──E feature

如果:

  • main 在 feature 创建后没有新提交
  • main 只是“落后”于 feature

那么 merge 时:

gitcheckout maingitmerge feature

Git 会直接:

A──B──C──D──E

不会创建 merge commit。

这叫:

Fast-Forward Merge(FF Merge)

意思是:

main 指针直接向前移动。


五、什么是 Three-Way Merge(三方合并)

如果两个分支都发生了新提交:

D──E feature / A──B──C \ F──G main

这时候:

  • 无法直接快进

  • Git 必须:

    • 找共同祖先
    • 比较双方改动
    • 创建 merge commit

结果:

D──E / \ A──B──C─────M \ F──G

这就是:

Three-Way Merge

因为涉及:

  1. 共同祖先
  2. 当前分支
  3. 被合并分支

三个节点。


六、merge commit 是什么?

merge commit 是:

一个拥有多个 parent 的 commit。

普通 commit:

parent -> current

merge commit:

parent1 -> merge parent2 -> merge

查看:

gitlog--graph--oneline

效果:

* a1b2c3 Merge branch 'feature' |\ | * e5f6g7 feature commit * | h8i9j0 main commit |/

(补充)为什么要用 merge commit?

保留完整历史
合并后,你依然能清晰看到feature分支是从哪来的、改了什么
(如果不用 merge commit,历史会被“压平”,丢失分支信息)

可追溯性
当需要回滚或排查问题时,能明确知道这个合并操作连接了哪两个分支

七、git merge 常用命令

1. 合并分支

gitmerge feature/login

2. 不创建 Fast-Forward

gitmerge --no-ff feature/login

即使能 FF,也强制创建 merge commit。

适合:

  • 保留功能开发历史
  • 方便回滚 feature
  • 团队协作

结果:

main ─── M / feature

3. 只允许 Fast-Forward

gitmerge --ff-only feature/login

如果不能 FF:

merge aborted

常用于:

  • 保持线性历史
  • 禁止 merge commit

4. squash merge

gitmerge--squashfeature/login

作用:

把整个 feature 分支压缩成一个提交。

特点:

  • 不保留 feature 历史
  • 不生成 merge commit
  • 提交历史更干净

适合:

  • 小功能
  • 杂乱提交
  • 临时分支

八、merge conflict(合并冲突)

这是 Git merge 中最重要的问题。

冲突产生原因

两个分支:

  • 修改了同一文件
  • 修改了同一位置

Git 无法判断保留谁。

例如:

main:

name="main"

feature:

name="feature"

merge 时:

CONFLICT(content): Merge conflictinapp.py

九、冲突文件长什么样?

Git 会插入:

<<<<<<< HEAD name = "main" ======= name = "feature" >>>>>>> feature/login

含义:

<<<<<<< HEAD 当前分支内容 ======= 对方分支内容 >>>>>>> feature/login

需要手动修改。


十、解决 merge conflict

步骤:

1. 编辑冲突文件

手动保留正确内容:

name="new value"

删除:

<<<<<<< ======= >>>>>>>

2. 标记已解决

gitaddapp.py

3. 完成 merge

gitcommit

Git 会自动生成 merge commit。


十一、放弃 merge

如果 merge 一团糟:

gitmerge--abort

恢复到 merge 前状态。

非常有用。


十二、查看 merge 历史

图形查看

gitlog--graph--oneline--all

非常推荐。


查看 merge commit

gitlog--merges

十三、merge 与 rebase 的区别

这是 Git 中最经典的话题。

merge

特点:

  • 保留真实历史
  • 有 merge commit
  • 分支结构清晰

历史:

A──B──C────M \ / D──E

rebase

特点:

  • 改写历史
  • 提交线性化
  • 更干净

结果:

A──B──C──D'──E'

如何选择?

通常:

团队协作:

推荐:

merge

因为:

  • 安全
  • 不改历史
  • 不容易出事故

个人 feature 整理:

推荐:

rebase

因为:

  • 提交更干净
  • 阅读体验更好

十四、merge 的最佳实践

1. 小步合并

不要:

一个月后一次性 merge

应该:

频繁同步

否则冲突会爆炸。


2. merge 前先 pull

gitpull

确保分支最新。


3. 使用 Pull Request

现代团队一般:

feature -> PR -> review -> merge

而不是直接 merge。


4. 重要分支使用 --no-ff

例如:

gitmerge --no-ff feature/payment

这样未来:

gitrevert

更容易整体回滚 feature。


5. 学会看 graph

推荐:

gitlog--graph--decorate--oneline--all

这是理解 Git 历史最有效的方法。


十五、merge 的本质理解(非常重要)

很多人认为 merge 是:

“复制代码”

其实不是。

merge 本质是:

整合 commit 历史

Git 管理的是:

commit DAG(有向无环图)

merge 的核心:

连接两条提交链

代码变化只是结果。


十六、实际团队开发中的 merge 流程

典型流程:

1. 创建功能分支

gitcheckout-bfeature/order-system

2. 开发提交

gitcommit

3. 同步主分支

gitcheckout maingitpull

4. 合并 feature

gitmerge --no-ff feature/order-system

5. 删除 feature

gitbranch-dfeature/order-system

十七、总结

git merge是 Git 协作模型的核心。

它不仅是:

代码合并工具

更是:

团队开发历史管理机制

理解 merge 后,你会真正理解:

  • Git 分支模型
  • commit DAG
  • 团队协作
  • PR 工作流
  • rebase 与 merge 的区别

最后记住一句话:

merge 不是“复制代码” 而是“连接历史”

这才是 Git 最核心的思想。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 3:10:45

java学习笔记(1)

UML类图一、UML类图核心关系详解 UML类图是面向对象设计的“语言”&#xff0c;通过不同的箭头符号&#xff0c;清晰表达类与类之间的交互逻辑&#xff0c;是理解设计原则的基础。 关联关系 类与类之间存在长期的、结构性的联系&#xff0c;比如“用户和订单”&#xff0c;一个…

作者头像 李华
网站建设 2026/5/8 3:09:16

Bonsai Memory:为AI智能体构建分层记忆索引,实现Token消耗降低81%

1. 项目概述&#xff1a;为AI智能体“修剪”记忆&#xff0c;实现极致Token优化如果你正在使用基于大型语言模型&#xff08;LLM&#xff09;的AI智能体&#xff0c;比如OpenClaw或其他任何需要持久化记忆的框架&#xff0c;那么你一定对“上下文窗口”和“Token消耗”这两个词…

作者头像 李华
网站建设 2026/5/8 3:08:29

量子计算中的稀疏振幅编码与AIQT技术解析

1. 量子计算中的状态准备挑战在量子计算领域&#xff0c;将经典数据高效编码为量子态是一个基础但极具挑战性的任务。传统方法如Grover算法和量子随机存取存储器(QRAM)虽然理论上可行&#xff0c;但在实际应用中面临两大核心问题&#xff1a;量子资源消耗与信息保留效率。量子态…

作者头像 李华
网站建设 2026/5/8 2:56:34

WeClaw:无缝集成AI智能体到微信,打造高效技术沟通流

1. 项目概述与核心价值如果你和我一样&#xff0c;经常在微信上和朋友、同事讨论技术问题&#xff0c;或者需要快速处理一些代码片段、文档草稿&#xff0c;那么来回切换微信和AI工具&#xff08;比如Claude、Codex、Kimi&#xff09;的过程就非常割裂。要么得把聊天记录里的代…

作者头像 李华