1.分支基础概念
| 概念 |
说明 |
| 分支 (Branch) |
指向某个提交的指针,独立开发线 |
| HEAD |
当前检出的分支/提交引用 |
| 主分支 |
通常叫 main 或 master,代表稳定版本 |
| 合并 (Merge) |
将两个分支的历史整合在一起 |
| 变基 (Rebase) |
将一个分支的提交”重放”到另一个分支之上 |
2.常用分支命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| git branch git branch -r git branch -a git branch -v
git branch feature-x git checkout feature-x git switch feature-x git checkout -b feature-x
git branch -d feature-x git branch -D feature-x git push origin --delete feature-x
git checkout main git merge feature-x git merge --squash feature-x git merge --no-ff feature-x
git checkout feature-x git rebase main
|
3.主流分支工作流
3.1 Git Flow
main (生产环境)
↑
develop (集成分支)
↑
feature/* ─┐
release/* ─┼─→ 预发布
hotfix/* ──┘
| 分支类型 |
命名 |
来源 |
去向 |
生命周期 |
| 功能分支 |
feature/xxx |
develop |
develop |
短期 |
| 发布分支 |
release/xxx |
develop |
main + develop |
中期 |
| 热修复分支 |
hotfix/xxx |
main |
main + develop |
紧急 |
| 开发分支 |
develop |
- |
- |
永久 |
| 主分支 |
main |
- |
- |
永久 |
适用场景: 有固定发布周期的传统项目(如版本化软件发布)
3.2 GitHub Flow
main (始终可部署)
↑
feature/* ──→ PR/MR ──→ 合并到 main
| 规则 |
说明 |
只有 main 分支 |
极简,无 develop/release 分支 |
| 功能分支从 main 创建 |
git checkout -b feature/xxx |
| 完成即合并 |
通过 Pull Request 审核 |
| 合并后直接部署 |
main 始终处于可发布状态 |
适用场景: 持续交付的 Web 应用、SaaS 服务
3.3 GitLab Flow
main (生产环境)
↑
environment/* ──→ 对应环境的分支
↑
feature/* ──→ 功能开发
| 规则 |
说明 |
| 每个环境一个分支 |
production、staging、dev |
| 分支保护 |
只能 MR 合并,不能直接 push |
| 预发布环境 |
staging 分支对应测试环境 |
适用场景: 多环境部署的 CI/CD 项目
3.4 Trunk-Based Development (主干开发)
main (唯一长期分支)
↑
short-lived feature branches (1-2天)
↑
CI/CD 自动化测试 → 合入 main
| 要点 |
说明 |
| 分支生命周期极短 |
通常不超过 1 天 |
| 频繁合入主干 |
每天多次合并到 main |
| 特性开关 (Feature Flag) |
未完成的代码通过开关隐藏 |
| 强 CI/CD 支撑 |
自动化测试保证主干稳定 |
适用场景: 大厂级持续交付(Google、Meta 等)
4.分支策略对比
| 维度 |
Git Flow |
GitHub Flow |
Trunk-Based |
| 分支数量 |
多 |
少 |
极少 |
| 学习曲线 |
陡峭 |
简单 |
中等 |
| 发布节奏 |
固定版本 |
随时发布 |
随时发布 |
| 适合团队 |
中大型 |
中小团队 |
大型工程团队 |
| CI/CD 要求 |
一般 |
需要 |
强依赖 |
| 风险控制 |
发布分支隔离 |
PR 审查 |
Feature Flag |
| 复杂度 |
高 |
低 |
中 |
5.分支保护规则
5.1 保护主分支
1 2 3 4 5 6 7
| ✓ 禁止强制推送 (No force push) ✓ 禁止直接推送到 main ✓ 要求至少 N 人审核批准 ✓ 要求 CI 检查通过 ✓ 要求线性历史(可选) ✓ 签名提交(可选)
|
5.2 分支命名规范
feature/xxx # 新功能开发
bugfix/xxx # Bug 修复
release/x.y.z # 发布准备
hotfix/xxx # 线上紧急修复
docs/xxx # 文档更新
chore/xxx # 杂项维护
5.3 提交信息规范
feat: 添加用户登录功能
fix: 修复支付超时问题
docs: 更新 API 文档
refactor: 重构订单模块
test: 添加单元测试
chore: 升级依赖版本
6.常见冲突与解决
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| git merge feature-x
git add <resolved-files> git commit -m "resolve merge conflict"
git rebase main
git add <resolved-files> git rebase --continue
git rebase --abort git merge --abort
|
7.分支清理策略
1 2 3 4 5 6 7 8 9 10 11
| git branch --merged main | grep -v "^\*\| main" | xargs git branch -d
git fetch --prune
git for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(committerdate:relative)'
git remote prune origin
|