1、什么是分支模型
在团队协作中,代码管理离不开分支。但分支怎么建、怎么合、什么时候发版,如果没有一套约定,很快就会乱成一团。分支模型就是团队对分支管理方式的一种约定——规定哪些分支是长期存在的、分支之间如何合并、发布流程怎么走。
Git 本身只是一个工具,它没有强制你必须怎么用。真正决定协作效率的,是团队选择的分支模型。
常见的分支模型有四种:Git Flow、GitHub Flow、GitLab Flow 和 Trunk-Based Development。本系列将逐一介绍它们的特点和适用场景。
2、Git Flow 概述
Git Flow 由 Vincent Driessen 在 2010 年提出,是最早、也是最经典的分支模型。它定义了一套严格的分支管理规则,适合有固定发布周期的项目。
Git Flow 定义了两种长期分支和三种短期分支:
长期分支(始终存在):
main(或master):存放随时可以发布到生产环境的代码。每次合并到main都意味着一个新版本发布。develop:开发主线,所有功能分支都从这里拉出,完成后也合并回这里。
短期分支(用完即删):
feature/xxx:功能分支,从develop拉出,开发完成后合并回develop。release/x.x.x:发布分支,从develop拉出,用于发布前的测试和 bug 修复,完成后合并到main和develop。hotfix/x.x.x:热修复分支,从main拉出,紧急修复生产环境 bug,完成后合并到main和develop。
3、工作流程
main: v1.0 ───────────────────────────── v1.0.1 ────────── v1.1
│ ▲ ▲
│ hotfix/1.0.1 ──────────────────────┘ │
│ │
develop: ├── v1.0 ──────────────────────────────┬──────────────┤
│ \ \ │ │
│ feature/A ────────────┐ │ │
│ feature/B ────────┤ │
│ │ │
│ release/1.1 ─┘ │
功能开发(feature)
# 从 develop 拉出功能分支
git checkout -b feature/user-login develop
# 开发完成后合并回 develop
git checkout develop
git merge --no-ff feature/user-login
git branch -d feature/user-login
--no-ff 表示禁用快进合并,始终创建一个合并提交,这样在历史中能清楚地看到一个功能分支的起点和终点。
发布流程(release)
# 从 develop 拉出发布分支
git checkout -b release/1.1.0 develop
# 在 release 分支上只做 bug 修复,不改功能
# 修复完成后合并到 main 和 develop
git checkout main
git merge --no-ff release/1.1.0
git tag -a v1.1.0 -m "Release v1.1.0"
git checkout develop
git merge --no-ff release/1.1.0
git branch -d release/1.1.0
热修复(hotfix)
# 从 main 拉出热修复分支
git checkout -b hotfix/1.0.1 main
# 修复 bug 后合并到 main 和 develop
git checkout main
git merge --no-ff hotfix/1.0.1
git tag -a v1.0.1 -m "Hotfix v1.0.1"
git checkout develop
git merge --no-ff hotfix/1.0.1
git branch -d hotfix/1.0.1
热修复和发布分支的区别在于:热修复从 main 拉出(生产环境紧急修复),发布分支从 develop 拉出(按计划发布)。
4、适用场景
Git Flow 适合以下场景:
- 有固定发布周期:比如每月发一个版本,或者每两周一个迭代。
- 多版本并行维护:需要同时维护多个线上版本(如 v1.0、v2.0)。
- 团队规模较大:多人协作,需要严格的分支管理规范。
- 传统软件交付:客户端软件、SDK 等需要明确版本号的项目。
5、Git Flow 工具
除了手动执行上面的命令,也可以使用 git-flow 扩展工具简化操作:
# 安装 git-flow(Windows 自带 / macOS: brew install git-flow)
git flow init # 初始化,设置分支前缀
git flow feature start user-login # 创建功能分支
git flow feature finish user-login # 完成功能分支(自动合并到 develop)
git flow release start 1.1.0 # 创建发布分支
git flow release finish 1.1.0 # 完成发布(自动合并到 main 和 develop、打 tag)
git flow hotfix start 1.0.1 # 创建热修复分支
git flow hotfix finish 1.0.1 # 完成热修复
6、优缺点
优点:
- 规则清晰,每个分支的职责明确
- 适合有固定发布周期的项目
- 分支历史可追溯,方便回顾
缺点:
- 分支类型多,操作繁琐,小团队会觉得沉重
- 发布流程长,不适合持续部署
develop和main长期存在,容易产生大量合并提交
7、总结
Git Flow 是一套严谨的分支管理模型,它把软件开发中的不同阶段(开发、测试、发布、热修复)映射到不同的分支上,让整个流程有章可循。如果你的团队有明确的版本发布节奏,Git Flow 是一个不错的选择。
但它的复杂度也是显而易见的。下一篇文章,我们来看看更轻量的 GitHub Flow。
每天前进一小步,就是一个新的高度!