第 5 课:分支管理(Git 的灵魂)
如果说 Git 最伟大的设计是什么,那么答案几乎一定是「分支(Branch)」。
学完这一课,你将理解:
- 分支到底是什么
- 为什么团队开发必须使用分支
- 如何创建、切换、删除分支
- 如何合并分支
- 什么是 Fast Forward
- 什么是三路合并(Three-Way Merge)
- 为什么会产生冲突
- 企业项目中的分支管理思想
5.1 为什么需要分支?
假设你正在开发一个博客项目。
当前主分支:
main
代码运行正常。
现在老板说:
新增用户登录功能
如果直接在 main 上开发:
main
├── 登录开发一半
├── Bug
├── 页面报错
└── 无法上线
风险非常大。
正确做法:
main
└── feature/login
登录功能在新分支开发。
即使写崩了:
main
仍然稳定。
所以:
分支 = 独立开发空间
5.2 Git 分支的本质
很多人以为:
创建分支
=
复制整个项目
实际上不是。
Git 底层:
分支只是一个指针
例如:
A → B → C
↑
main
创建:
dev
后:
A → B → C
↑
main
↑
dev
几乎不占空间。
创建速度:
毫秒级
这也是 Git 分支强大的原因。
5.3 查看分支
查看本地分支:
git branch
输出:
* main
含义:
*
表示当前所在分支。
5.4 创建分支
创建:
git branch dev
查看:
git branch
输出:
* main
dev
说明:
dev 创建成功
但当前仍在:
main
5.5 切换分支
切换:
git checkout dev
或者新版 Git:
git switch dev
输出:
Switched to branch 'dev'
查看:
git branch
输出:
main
* dev
5.6 创建并切换分支
最常用命令:
git checkout -b dev
或者:
git switch -c dev
等价于:
git branch dev
git switch dev
开发中最常见:
git checkout -b feature/login
5.7 分支开发演示
当前:
main
创建:
git checkout -b feature/login
创建文件:
login.html
提交:
git add .
git commit -m "完成登录页面"
查看提交图:
A → B → C
↑
main
D
↑
feature/login
此时:
main
完全没受到影响。
5.8 合并分支
登录功能开发完成。
需要合并:
feature/login
到:
main
第一步:
切回主分支
git switch main
第二步:
执行合并
git merge feature/login
结果:
A → B → C → D
↑
main
登录功能进入主分支。
5.9 Fast Forward 合并
最常见情况:
A → B → C
↑
main
↑
feature
feature 开发:
A → B → C → D → E
↑
feature
main 没有变化。
此时:
git merge feature
Git 直接把:
main
移动到:
E
这叫:
Fast Forward
简称:
FF 合并
5.10 三路合并(Three-Way Merge)
如果:
main
和:
feature
都发生变化。
例如:
A → B → C
↑
分叉点
main:
A → B → C → D
↑
main
feature:
A → B → C → E
↑
feature
此时:
git merge feature
Git 自动生成:
A → B → C → D
\ \
\ M
\ /
E
新的:
M
叫:
Merge Commit
这就是:
Three-Way Merge
5.11 查看提交图
非常实用:
git log --oneline --graph --all
效果:
* 9a8b7c Merge branch feature/login
|\
| * 4f3e2d 完成登录功能
|
* 1a2b3c 更新首页
帮助理解:
分支结构
5.12 删除分支
功能开发完成:
git branch -d feature/login
输出:
Deleted branch feature/login
说明:
安全删除
5.13 强制删除分支
如果:
未合并
Git 会阻止删除。
强制删除:
git branch -D feature/login
⚠️ 慎用:
可能导致代码丢失
5.14 查看所有分支
本地:
git branch
远程:
git branch -r
全部:
git branch -a
5.15 推送分支到远程
创建:
git checkout -b feature/login
推送:
git push -u origin feature/login
结果:
本地分支
↓
远程分支
建立关联。
以后:
git push
即可。
5.16 删除远程分支
删除:
git push origin --delete feature/login
远程:
feature/login
被删除。
5.17 为什么会产生冲突?
最经典场景:
张三:
String name = "Tom";
修改为:
String name = "Jerry";
李四:
String name = "Tom";
修改为:
String name = "Mike";
Git 不知道保留谁。
于是:
Merge Conflict
冲突产生。
5.18 冲突长什么样?
文件内容:
<<<<<<< HEAD
String name = "Jerry";
=======
String name = "Mike";
>>>>>>> feature/login
含义:
HEAD
=
当前分支代码
=======
分隔线。
>>>>>>>
对方分支代码。
5.19 解决冲突
手动修改:
String name = "Jerry";
或者:
String name = "Mike";
或者:
String name = "Jerry-Mike";
删除:
<<<<<<<
=======
>>>>>>>
标记。
保存。
提交:
git add .
git commit -m "解决登录模块合并冲突"
冲突解决完成。
5.20 企业开发中的分支模型
最常见:
main
生产环境。
dev
开发环境。
feature/*
功能开发。
bugfix/*
线上修复。
结构:
main
│
└── dev
│
├── feature/login
│
├── feature/order
│
└── bugfix/password
开发流程:
main
↓
dev
↓
feature
↓
dev
↓
main
本课总结
掌握以下命令:
查看分支
git branch
创建分支
git branch dev
切换分支
git switch dev
创建并切换
git switch -c dev
合并分支
git merge feature/login
删除分支
git branch -d feature/login
强制删除
git branch -D feature/login
推送分支
git push -u origin feature/login
删除远程分支
git push origin --delete feature/login
牢记企业开发核心思想:
main 永远稳定
功能开发不碰 main
每个功能一个分支
开发完成再合并
至此,你已经掌握了 Git 最核心的能力——分支管理。
下一课《第 6 课:Git 冲突解决与团队协作实战》将进入真实项目场景:
- 两个人同时开发
- Pull Request(PR)
- Code Review
- 冲突定位
- 冲突解决技巧
- Rebase 介绍
- 企业 Git Flow 工作流
学完这一课,你就已经达到绝大多数初级开发者的 Git 水平。