跳过正文
  1. 教程/
  2. Git 入门到实操:新手从 0 到会用提交、分支、回退和远程仓库/

Git 合并与冲突解决

·844 字·2 分钟
Evan Wu
作者
Evan Wu
记录 AI、技术实践、效率工具、项目经验与学习思考。
Git Mastery - 系列专栏
✦ 10: 本文

在多人协作开发中,Git 合并(merge)是非常高频的操作。但只要涉及多人修改同一份代码,就很容易遇到一个问题:冲突(Conflict)

本文将系统讲清 Git 合并的几种方式、冲突是怎么产生的、如何解决冲突,以及如何尽量减少冲突。

合并与冲突常用命令
#

操作命令
合并分支git merge 分支名
Fast-forward 合并(默认)git merge 分支名
创建合并提交git merge --no-ff 分支名

1. 什么是合并分支?
#

Git 合并(merge)是指把一个分支的代码变化,整合到另一个分支中。

例如:

feature/login → main

表示把登录功能分支的代码合并到主分支。

常见场景:

  • 功能开发完成合并到 main
  • bugfix 修复合并回开发分支
  • release 分支合并上线

合并的本质是:把两个分支的提交历史整合到一起


2. Fast-forward 合并
#

如果主分支在功能分支创建后没有新提交,Git 可能直接把主分支指针向前移动。

这种方式称为 Fast-forward。

示例:

A---B main
     \
      C---D feature/login

合并后:

A---B---C---D main

Fast-forward 的特点:

  • 不产生 merge commit
  • 历史是线性的
  • 简洁,但不适合复杂协作

3. 创建合并提交
#

如果两个分支都产生了新提交,Git 通常会创建一个新的合并提交(merge commit)。

A---B---C------M main
     \        /
      D---E--F feature/login

# M 是 merge commit,表示一次完整的合并记录。

可以使用:

git merge --no-ff feature/login

明确要求创建合并提交。


4. 为什么会产生冲突?
#

冲突的本质是:

两个分支修改了同一文件的同一位置

例如:

main:    hello world
feature: hello Git

Git 不知道该保留哪个版本,就会报冲突。


5. 冲突标记
#

当发生冲突时,文件中会出现:

<<<<<<< HEAD 
hello world 
======= 
hello Git 
>>>>>>> feature/login

含义:

  • HEAD:当前分支内容
  • =======:分隔线
  • feature/login:要合并进来的内容

6. 解决冲突的方法
#

手动修改为最终需要的内容:

hello Git

删除所有冲突标记后执行:

git add 冲突文件
git commit

也可以填写明确说明:

git commit -m ""

7. 查看冲突文件
#

# 查看冲突文件状态
git status

# 查看冲突来源
git diff

# 只查看未合并冲突文件
git diff --name-only --diff-filter=U

8. 取消合并
#

# 恢复到合并开始前的状态
git merge --abort

9. 减少冲突的方法
#

  • 开始开发前同步最新代码 git pull
  • 功能分支不要长期存在;
  • 一个分支只负责一个明确功能;
  • 避免多人修改同一文件的同一位置;
  • 及时提交和推送;
  • 大规模重构前提前沟通;
  • 提交合并请求前同步目标分支。
Git Mastery - 系列专栏
✦ 10: 本文