Git 分支管理:团队协作的基石
分支就像平行宇宙——你可以在不影响主宇宙的情况下,创建一个新的宇宙去搞实验。
为什么需要分支?
想象你在写一篇论文。写到一半,突然有个新想法,但又不想把当前的内容搞乱。怎么办?
复制一份,随便改。这就是分支。
在 Git 里,分支让你可以:
- 安全地尝试新功能:搞砸了?删掉分支就行,主代码纹丝不动
- 多人同时开发:你做登录,我做首页,互不干扰
- 保持主分支稳定:main 分支永远是可以运行的版本
用火车轨道理解分支
把 Git 仓库想象成一条铁路系统:
main: ════════════●═══════════●═══════════●
\ /
feature-login: ●═════●
/
feature-home: ══════●═══════════●
- main 是主干线——乘客(用户)坐的正式列车
- feature-login 是支线——工程队在上面修新站,修好了并入主干线
- feature-home 是另一条支线——另一个工程队同时在修
支线上的工作不影响主干线的正常运营。修好了,接上去就行。
分支类型速览
| 分支名 | 作用 | 举例 |
|---|---|---|
main | 生产代码,随时可部署 | 发布版本 |
develop | 开发主线,集成功能 | 日常开发 |
feature/* | 新功能开发 | feature/login |
bugfix/* | 修 bug | bugfix/header-crash |
hotfix/* | 紧急修复生产问题 | hotfix/payment-error |
基本分支操作
创建分支
# 查看当前分支
git branch
# 创建新分支
git branch feature/login
# 切换到新分支
git checkout feature/login
# 创建并切换(常用快捷方式)
git checkout -b feature/login
# Git 2.23+ 的新写法(推荐)
git switch -c feature/login
查看所有分支
# 本地分支
git branch
# 包含远程分支
git branch -a
# 查看分支最后提交
git branch -v
删除分支
# 删除已合并的分支
git branch -d feature/login
# 强制删除(未合并也删)
git branch -D feature/login
合并分支
merge——最常见的合并方式
# 切回 main
git switch main
# 把 feature/login 合并进来
git merge feature/login
merge 有两种模式:
快进合并(Fast-Forward)——main 没有新提交,直接"快进":
合并前:
main: A → B
\
feature: C → D
合并后(快进):
main: A → B → C → D
三方合并——main 和分支都有新提交:
合并前:
main: A → B → E
\
feature: C → D
合并后:
main: A → B → E → F (merge commit)
\ /
feature: C → D
rebase——让历史更干净
# 在 feature 分支上
git rebase main
rebase 会把你的提交"搬到"main 的最新位置后面,让历史变成一条直线:
rebase 前:
main: A → B → E
\
feature: C → D
rebase 后:
main: A → B → E → C' → D'
merge vs rebase 的选择:
- merge 保留真实历史,适合公共分支
- rebase 历史更干净,适合个人分支
- 黄金法则:不要 rebase 已经推送到远程的公共分支
Pull Request(PR)基础
Pull Request 是代码审查的核心流程。你写完功能,请求团队把你的代码"拉"进主分支。
在 GitHub 上创建 PR
# 1. 把你的分支推送到远程
git push origin feature/login
# 2. 去 GitHub 仓库页面,会看到黄色提示条
# 点击 "Compare & pull request"
# 3. 填写 PR 描述
# - 做了什么
# - 为什么这么做
# - 怎么测试
# 4. 等待 review,通过后 merge
PR 描述模板
## 做了什么
添加用户登录功能,支持邮箱/密码登录
## 为什么
用户需要账户系统来保存数据
## 怎么测试
1. 访问 /login
2. 输入邮箱和密码
3. 点击登录,应该跳转到首页
## 截图
(附上截图)
处理合并冲突
冲突是 Git 无法自动合并时发生的——两个人改了同一行代码。
冲突长什么样
<<<<<<< HEAD
const title = "欢迎回来";
=======
const title = "你好,欢迎";
>>>>>>> feature/login
<<<<<<< HEAD到=======:你当前分支的内容=======到>>>>>>> feature/xxx:被合并分支的内容
解决步骤
# 1. 执行合并,遇到冲突
git merge feature/login
# CONFLICT (content): Merge conflict in src/app/page.tsx
# 2. 查看哪些文件有冲突
git status
# both modified: src/app/page.tsx
# 3. 打开文件,手动选择要保留的内容
# 删掉 <<<<<<< ======= >>>>>>> 标记,保留正确的代码
# 4. 标记为已解决
git add src/app/page.tsx
# 5. 完成合并
git commit -m "merge: 合并 feature/login,解决冲突"
用 VS Code 解决冲突
VS Code 会高亮显示冲突,并提供按钮:
- Accept Current Change——保留当前分支
- Accept Incoming Change——保留被合并的分支
- Accept Both Changes——两边都保留
- Compare Changes——对比差异
分支命名规范
好的分支名一看就知道在干什么:
# ✅ 好的命名
feature/user-login
feature/payment-stripe
bugfix/header-not-showing
hotfix/fix-payment-crash
chore/update-dependencies
# ❌ 坏的命名
my-branch
test
fix
new-feature
temp
命名格式:类型/简短描述
| 类型 | 用途 | 例子 |
|---|---|---|
feature/ | 新功能 | feature/user-profile |
bugfix/ | 修 bug | bugfix/login-error |
hotfix/ | 紧急修复 | hotfix/payment-crash |
chore/ | 杂务 | chore/cleanup-deps |
docs/ | 文档 | docs/api-guide |
refactor/ | 重构 | refactor/auth-module |
GitHub Flow vs Git Flow
Git Flow——传统大项目
main ─────────────────────────────
│ ↑
│ ┌─ release/1.0 ────────┘
│ │
└── develop ──────────────────
│ │
│ └─ feature/B
└─ feature/A
适合:大团队、有固定发布周期的项目
GitHub Flow——简单实用(推荐新手)
main ────────────────────────
│ ↑ ↑
├─ feat/A ┘ │
│ │
└─ feat/B ──────────┘
规则很简单:
- main 分支永远可部署
- 新功能从 main 创建分支
- 开发完提交 PR
- Code review 通过后合并到 main
- 合并后立即部署
新手直接用 GitHub Flow,简单够用。
实战:用分支开发登录功能
来走一遍完整的流程:
# 1. 确保在 main 分支,代码最新
git switch main
git pull
# 2. 创建功能分支
git switch -c feature/user-login
# 3. 开始写代码
# 创建登录页面
# src/app/login/page.tsx
// src/app/login/page.tsx
export default function LoginPage() {
return (
<div className="flex min-h-screen items-center justify-center">
<form className="w-96 space-y-4 rounded-lg border p-8">
<h1 className="text-2xl font-bold">登录</h1>
<input
type="email"
placeholder="邮箱"
className="w-full rounded border p-2"
/>
<input
type="password"
placeholder="密码"
className="w-full rounded border p-2"
/>
<button className="w-full rounded bg-blue-500 p-2 text-white">
登录
</button>
</form>
</div>
);
}
# 4. 提交代码
git add .
git commit -m "feat: 添加登录页面 UI"
# 5. 继续开发,添加登录逻辑
# ... 写代码 ...
git add .
git commit -m "feat: 实现邮箱密码登录功能"
# 6. 推送到远程
git push -u origin feature/user-login
# 7. 在 GitHub 上创建 PR
# 填写描述,等待 review
# 8. Review 通过后,合并
# 在 GitHub 页面点击 "Merge pull request"
# 9. 本地同步
git switch main
git pull
# 10. 删除功能分支
git branch -d feature/user-login
git push origin --delete feature/user-login
常用命令速查
# 分支操作
git branch # 查看本地分支
git branch -a # 查看所有分支
git switch -c feature/xxx # 创建并切换分支
git switch main # 切换分支
git branch -d feature/xxx # 删除分支
# 合并操作
git merge feature/xxx # 合并分支
git rebase main # 变基到 main
# 同步操作
git push -u origin feature/xxx # 推送新分支
git pull # 拉取最新代码
# 冲突处理
git status # 查看冲突文件
# 手动解决冲突后
git add . # 标记为已解决
git commit # 完成合并
小结
- 分支是安全的实验场——搞砸了删掉就行
- 新手用 GitHub Flow——简单够用
- 分支名要有意义——
feature/xxx、bugfix/xxx - 冲突不可怕——手动选一下就行
- PR 是团队协作的核心——写好描述,耐心等 review
分支管理不是什么高深的技术,就是一个好习惯。用得多了,自然就熟了。