Git Flow 从入门到精通
💡 一句话理解 Git Flow
Git Flow 是一种”分支管理策略”,用来规范:
- 谁改哪条分支
- 哪些分支能合并
- 什么时候发布版本
🧭 Git Flow 核心分支模型
| 分支 | 作用 | 谁可以动 |
|---|---|---|
main |
永远保持”可发布”的生产版本 | 维护者 |
develop |
日常开发主分支,整合所有 feature | 核心开发者 |
feature/* |
新功能分支,基于 develop 创建 | 所有贡献者 |
release/* |
准备发布的候选版本,来自 develop | 维护者 |
hotfix/* |
紧急修复生产问题,来自 main | 维护者 |
🔧 执行规范建议(开源项目可执行版)
1️⃣ 新功能开发
创建 Feature 分支
从 develop 创建分支:
1 | # 1. 切换到 develop 分支 |
分支命名规范
| 类型 | 命名格式 | 示例 |
|---|---|---|
| 新功能 | feature/功能名称 |
feature/user-login |
| Bug 修复 | feature/fix-问题描述 |
feature/fix-memory-leak |
| 重构 | feature/refactor-模块名 |
feature/refactor-api-client |
| 文档 | feature/docs-说明 |
feature/docs-api-reference |
开发与提交
1 | # 1. 进行开发工作 |
Commit Message 规范
遵循 Conventional Commits 规范:
1 | <type>(<scope>): <subject> |
常用 type 类型:
| Type | 说明 | 示例 |
|---|---|---|
feat |
新功能 | feat: 添加用户注册接口 |
fix |
Bug 修复 | fix: 修复登录验证失败的问题 |
docs |
文档更新 | docs: 更新 API 使用说明 |
style |
代码格式调整 | style: 统一代码缩进为 2 空格 |
refactor |
代码重构 | refactor: 优化数据库查询逻辑 |
test |
测试相关 | test: 添加用户模块单元测试 |
chore |
构建/工具变动 | chore: 升级依赖包版本 |
perf |
性能优化 | perf: 优化图片加载速度 |
创建 Pull Request
1 | # 推送分支后,在 GitHub/GitLab 上创建 PR |
PR 标题规范:
1 | feat: 新增用户认证功能 |
合并策略
推荐使用 Squash Merge:
1 | # 在 GitHub/GitLab 上选择 "Squash and merge" |
合并后清理:
1 | # 1. 切换回 develop |
2️⃣ 版本发布
创建 Release 分支
当 develop 分支积累了足够的功能,准备发布新版本时:
1 | # 1. 确保 develop 是最新的 |
语义化版本号(Semantic Versioning)
格式:MAJOR.MINOR.PATCH(主版本号.次版本号.修订号)
| 版本位 | 何时增加 | 示例 |
|---|---|---|
| MAJOR | 不兼容的 API 变更 | 1.0.0 → 2.0.0 |
| MINOR | 向后兼容的新功能 | 1.1.0 → 1.2.0 |
| PATCH | 向后兼容的问题修复 | 1.1.1 → 1.1.2 |
Release 分支上的工作
1 | # 1. 更新版本号(根据项目类型) |
完成发布
1 | # 1. 合并到 main 分支 |
自动化发布(GitHub Actions 示例)
1 | # .github/workflows/release.yml |
3️⃣ 紧急修复(Hotfix)
什么时候需要 Hotfix?
当生产环境(main 分支)出现严重 bug,需要立即修复时使用 hotfix 分支。
典型场景:
- 🔥 安全漏洞
- 💥 系统崩溃
- 🐛 影响核心功能的严重 bug
- 📉 性能严重下降
创建 Hotfix 分支
1 | # 1. 从 main 分支创建 hotfix 分支 |
修复问题
1 | # 1. 修复 bug |
完成 Hotfix
1 | # 1. 合并到 main 分支 |
快速 Hotfix 命令脚本
创建一个脚本文件 hotfix.sh 来自动化流程:
1 |
|
使用方法:
1 | chmod +x hotfix.sh |
✅ 配合工具
推荐工具集
| 工具 | 用途 | 配置难度 |
|---|---|---|
| git-flow | Git Flow 命令行工具 | ⭐ 简单 |
| GitHub Actions / GitLab CI | 自动化 CI/CD | ⭐⭐ 中等 |
| pre-commit hooks | 提交前自动检查 | ⭐ 简单 |
| Conventional Commits | 规范提交信息 | ⭐ 简单 |
| commitlint | 验证提交信息格式 | ⭐⭐ 中等 |
| husky | Git hooks 管理 | ⭐ 简单 |
| Release Please | 自动生成 CHANGELOG | ⭐⭐⭐ 复杂 |
| semantic-release | 自动版本管理 | ⭐⭐⭐ 复杂 |
git-flow 工具使用
安装 git-flow:
1 | # macOS |
使用 git-flow 简化操作:
1 | # 初始化 git-flow |
分支保护配置
在 GitHub/GitLab 上配置分支保护规则:
GitHub 配置
进入:Settings → Branches → Branch protection rules
保护 main 分支:
- ✅ Require pull request reviews before merging
- ✅ Require status checks to pass before merging
- ✅ Require branches to be up to date before merging
- ✅ Include administrators
- ✅ Restrict who can push to matching branches
保护 develop 分支:
- ✅ Require pull request reviews before merging
- ✅ Require status checks to pass before merging
- ✅ Require branches to be up to date before merging
GitLab 配置
进入:Settings → Repository → Protected branches
保护规则:
| 分支 | 允许合并 | 允许推送 |
|---|---|---|
main |
Maintainers | No one |
develop |
Developers + Maintainers | Developers + Maintainers |
CI/CD 配置示例
GitHub Actions 完整配置
1 | # .github/workflows/ci.yml |
Husky + Commitlint 配置
安装依赖:
1 | npm install --save-dev @commitlint/cli @commitlint/config-conventional husky |
配置 commitlint.config.js:
1 | module.exports = { |
初始化 husky:
1 | # 初始化 husky |
💬 实战建议
📊 不同团队规模的策略
小型团队(1-3 人)
简化版 Git Flow:
- 只保留
main分支 - 功能开发从
main拉feature/* - 完成后直接合并回
main - 紧急修复使用
hotfix/*
中型团队(4-10 人)
标准 Git Flow(推荐):
- 完整的
main+develop+feature/*+release/*+hotfix/* - 使用 PR/MR 进行代码审查
- 配置基本的 CI/CD
- 强制执行分支保护
大型团队(10+ 人)
增强版 Git Flow:
- 完整的 Git Flow
- 每个 feature 必须关联 Issue
- 强制代码审查(至少 2 人)
- 完整的 CI/CD 流程
- 自动化测试覆盖率要求(如 80%+)
- 自动化版本发布和 CHANGELOG 生成
⚠️ 常见陷阱与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 合并冲突频繁 | feature 分支存活时间过长 | ① 保持 feature 分支小而专注 ② 定期从 develop rebase ③ 及时合并完成的功能 |
| 版本混乱 | 没有遵循语义化版本 | ① 使用 semantic-release 自动管理 ② 建立版本号规范文档 |
| hotfix 忘记合并到 develop | 流程不熟悉 | ① 使用自动化脚本 ② 在合并 checklist 中明确标注 |
| main 分支被直接推送 | 没有配置分支保护 | ① 立即配置分支保护规则 ② 只允许通过 PR 合并 |
| 提交信息混乱 | 缺少规范 | ① 使用 commitlint 强制规范 ② 提供提交模板 |
✨ 最佳实践清单
- ✅ 分支命名规范:使用统一的前缀(
feature/,hotfix/,release/) - ✅ 提交信息规范:遵循 Conventional Commits
- ✅ 代码审查:所有合并都需要至少一人审查
- ✅ 自动化测试:PR 必须通过所有测试
- ✅ 分支保护:禁止直接推送到
main和develop - ✅ 定期清理:删除已合并的 feature 分支
- ✅ 文档更新:功能变更同步更新文档
- ✅ 版本标签:每次发布都打带注释的 tag
- ✅ CHANGELOG:自动或手动维护变更日志
- ✅ 回滚计划:每次发布都要有回滚预案
🎯 实施路线图
第 1 周:基础设施
- 创建
develop分支 - 配置分支保护规则
- 设置基本的 CI 流程
- 团队培训:Git Flow 基础
第 2-3 周:规范建立
- 引入 Conventional Commits
- 配置 commitlint + husky
- 编写团队规范文档
- 创建 PR/MR 模板
第 4 周:自动化
- 配置完整的 CI/CD
- 引入自动化测试
- 配置代码覆盖率报告
- 尝试自动化发布
第 5 周及以后:优化
- 收集团队反馈
- 优化流程痛点
- 引入更多自动化工具
- 持续改进
📚 延伸阅读
- Git Flow 原始博文 - Vincent Driessen
- GitHub Flow - GitHub 官方文档
- GitLab Flow - GitLab 官方文档
- Semantic Versioning - 语义化版本规范
- Conventional Commits - 约定式提交规范
- Trunk Based Development - 另一种分支策略
🎓 总结
Git Flow 是一套成熟、可靠的分支管理策略,特别适合:
✅ 有明确发布周期的项目
✅ 需要同时维护多个版本
✅ 团队规模较大(5人以上)
✅ 对稳定性要求高的生产环境
核心要点:
- 两个长期分支:
main(生产)+develop(开发) - 三种临时分支:
feature/*(功能)+release/*(发布)+hotfix/*(修复) - 规范化流程:从创建分支到合并都有明确步骤
- 自动化优先:用工具减少人为错误
- 团队协作:通过 PR/MR 进行代码审查
记住:Git Flow 不是银弹,根据团队实际情况灵活调整才是王道!🎉
Git Flow 从入门到精通




