摘要
本文通过时序图和分支树展示了Git分支协作与冲突解决的完整流程。首先演示了两个开发者基于同一远程仓库并行工作的场景:开发者A创建功能分支并提交,开发者B修复bug并推送。随后展示了无冲突合并与冲突合并两种情况,重点说明了冲突产生的原因(同一文件的同一行被不同分支修改)及解决步骤(手动编辑冲突文件→标记已解决→提交合并结果)。文章还通过实例操作详细演示了初始化仓库、创建分支、修改文件、合并冲突等Git命令的具体使用过程,帮助读者理解Git分支管理的核心概念和操作流程

一、分支模型与协作流程图

以下时序图展示了两个开发者基于同一远程仓库并行工作,以及分支合并与冲突解决的完整流程。

开发者B 本地仓库B 远程仓库(origin) 本地仓库A 开发者A 开发者B 本地仓库B 远程仓库(origin) 本地仓库A 开发者A 初始状态:远程已有 master 分支 开发者A:创建功能分支并提交 开发者B:基于 master 修复 bug 合并 feature-login 到 master(无冲突) 合并 bugfix-payment 到 master(产生冲突) 开发者A 拉取最新 master(含冲突解决后的版本) git clone origin git clone origin git branch feature-login git checkout feature-login 修改代码 → add → commit git push origin feature-login git checkout master git pull origin master git branch bugfix-payment 修改代码 → add → commit git push origin bugfix-payment git checkout master git pull origin master git merge feature-login git push origin master git checkout master git pull origin master 提示有冲突(CONFLICT) 手动编辑冲突文件 git add <file> git commit -m "merge bugfix-payment" git push origin master git pull origin master 自动合并成功(无新冲突)

二、分支树:先理解提交历史的结构

Git 的提交历史构成一棵树。每次 commit 产生一个节点,分支是指向某个节点的指针

main feature-login init feature add master add merge feature

为什么需要分支?

  • 并行开发:多个功能同时进行,互不干扰。
  • 隔离风险:实验性改动放在单独分支,失败直接删除。
  • 版本维护:为不同版本(v1.0、v2.0)创建长期分支。

三、实例操作

以下操作均在一个新目录中进行,使用命令行。

3.1 初始化并创建第一个文件

mkdir git-branch-demo
cd git-branch-demo
git init

在这里插入图片描述

创建 hello.txt,内容:

Line 1: Hello Git

在这里插入图片描述

git add hello.txt
git commit -m "第一次提交:添加 hello.txt"

在这里插入图片描述

完整过程:
在这里插入图片描述

3.2 创建并切换到新分支

git checkout -b feature-login

验证:

git branch -v

在这里插入图片描述

3.3 在新分支上修改并提交

编辑 hello.txt,增加一行:

Line 1: Hello Git
Line 2: Added by feature-login
git add hello.txt
git commit -m "feature-login: 增加第二行"

在这里插入图片描述

此时分支树分叉。

main feature-login init (8ca80d7) feature-login: 增加第二行

3.4 切换回主分支并修改同一文件

git checkout main

此时 hello.txt 是初始版本。编辑它:

Line 1: Hello Git
Line 2: Added by main

在这里插入图片描述
在这里插入图片描述

git add hello.txt
git commit -m "master: 增加第二行(不同内容)"

在这里插入图片描述

现在两个分支在**同一文件的同一位置(第二行)**分别做了不同修改 → 后续合并必然冲突。

main feature-login init feature add master add

四、合并冲突:产生原因与解决方法

4.1 为什么会产生冲突?

Git 合并时,会找到两个分支的最近公共祖先(merge base),然后执行三方合并

公共祖先 commit

master commit

feature commit

merge

结果

  • 如果 Base → master 与 Base → feature 的修改不重叠(修改了不同文件,或同一文件的不同行),Git 能自动合并。
  • 如果重叠(修改了同一文件的同一行或相邻行),Git 无法判断保留哪个版本,于是产生冲突,需要人工介入。

本例中,两个分支都是在第二行增加内容,但内容不同,因此 Git 报冲突。

4.2 执行合并(产生冲突)

main 分支上:

git merge feature-login

输出:

Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt
Automatic merge failed; fix conflicts and then commit the result.

此时状态为 (master|MERGING)
在这里插入图片描述
在这里插入图片描述
此时的分支树:

main feature-login init feature add master add merge conflict resolved

4.3 解决冲突(三步骤)

打开 hello.txt,内容变为:

Line 1: Hello Git
<<<<<<< HEAD
Line 2: Added by master
=======
Line 2: Added by feature-login
>>>>>>> feature-login

在这里插入图片描述

步骤1:手动编辑,删除 <<<<<<<、=======、>>>>>>> 标记,保留需要的内容。例如合并两句:

Line 1: Hello Git
Line 2: Added by master and feature-login

在这里插入图片描述

步骤2:标记为已解决:

git add hello.txt

步骤3:完成合并提交:

git commit -m "合并 feature-login,解决第二行冲突"

注意:此处的 git commit 不能带文件名,因为合并提交可能涉及多个文件。
在这里插入图片描述

五、正常合并(无冲突)

如果两个分支修改了不同文件,或者同一文件的不同行,合并将自动完成,无需人工干预。

示例场景:

feature 分支修改了 a.txt 的内容。
在这里插入图片描述
master 分支修改了 b.txt 的内容。
在这里插入图片描述

执行 git merge feature 后,Git 直接成功,并自动生成一个合并提交(非 fast-forward 时)。

git merge feature

在这里插入图片描述

六、远程分支协作常用命令

操作 命令
推送本地分支到远程 git push origin <branch>
拉取远程分支更新 git pull origin <branch>
查看所有远程分支 git branch -r
删除远程分支 git push origin --delete <branch>
克隆远程仓库 git clone <url>

邀请成员协作:在 Gitee 仓库中添加协作者,对方克隆后即可推送。

七、小结

概念 说明
分支树 提交历史形成的图结构,分支是指针
三方合并 基于公共祖先比较两个分支的差异
冲突原因 两个分支修改了同一文件的同一区域
解决冲突 手动编辑 → git addgit commit(无文件名)
正常合并 修改不重叠时自动完成
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐