Git 分支管理与团队协作

摘要

本文通过时序图和分支树展示了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 初始化并创建第一个文件

bash 复制代码
mkdir git-branch-demo
cd git-branch-demo
git init

创建 hello.txt,内容:

复制代码
Line 1: Hello Git
bash 复制代码
git add hello.txt
git commit -m "第一次提交:添加 hello.txt"

完整过程:

3.2 创建并切换到新分支

bash 复制代码
git checkout -b feature-login

验证:

bash 复制代码
git branch -v

3.3 在新分支上修改并提交

编辑 hello.txt,增加一行:

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

此时分支树分叉。
main feature-login init (8ca80d7) feature-login: 增加第二行


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

bash 复制代码
git checkout main

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

复制代码
Line 1: Hello Git
Line 2: Added by main


bash 复制代码
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 分支上:

bash 复制代码
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:标记为已解决:

bash 复制代码
git add hello.txt

步骤3:完成合并提交:

bash 复制代码
git commit -m "合并 feature-login,解决第二行冲突"

注意:此处的 git commit 不能带文件名 ,因为合并提交可能涉及多个文件。

五、正常合并(无冲突)

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

示例场景:

feature 分支修改了 a.txt 的内容。

master 分支修改了 b.txt 的内容。

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

bash 复制代码
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(无文件名)
正常合并 修改不重叠时自动完成
相关推荐
DogDaoDao3 小时前
Windows 下 Git 报错:`touch` 无法识别 —— 原因分析与 7 种解决方案(从入门到精通)
windows·git·程序员·npm·powershell·cmd·touch
caicai_xiaobai3 小时前
Ubuntu上Git安装步骤
linux·git·ubuntu
come112344 小时前
git 区分是 Git 分支还是 worktree 路径名
git
憧憬成为java架构高手的小白5 小时前
git多人工作之个人规范使用【ai+个人理解】
git
CVer儿5 小时前
git简单操作
git
Andya_net5 小时前
Git | Git 核心命令深入解析:从原理到实战
大数据·git·elasticsearch
wh_xia_jun6 小时前
给小白的 Maven 命令行执行测试 完整指南
git·maven·intellij-idea
专业白嫖怪6 小时前
H3C UniServer R4950 G5 服务器压测实战:13根内存条24小时压力测试全流程
git
我先去打把游戏先7 小时前
Ubuntu虚拟机(服务器版本)Git安装教程(附常用命令)——从零开始掌握版本控制
服务器·c语言·c++·git·嵌入式硬件·物联网·ubuntu