Git Flow 是由 Vincent Driessen 提出的一种高效的分支管理模型,适用于中大型项目或有明确发布周期的团队。其核心思想是通过明确的分支角色和严格的生命周期,规范化开发、测试、发布和维护流程。
核心分支结构
- 主分支(
master
)- 仅存放生产环境可用的稳定代码。
- 只能通过合并
release
或hotfix
分支更新。 - 每次合并需打标签(
tag
),标明版本号(如v1.0.0
)。
- 开发分支(
develop
)- 集成所有新功能的基准分支,代表下一版本的开发状态。
- 功能分支(
feature/*
)和修复分支(hotfix/*
)均基于此分支创建。
- 辅助分支(临时性,用后删除)
- 功能分支(
feature/\*
):开发新功能。 - 发布分支(
release/\*
):准备发布的测试和修复。 - 热修复分支(
hotfix/\*
):紧急修复生产环境问题。
- 功能分支(
详细使用流程
1. 初始化 Git Flow
# 安装 git-flow 工具(如未安装)
# macOS: brew install git-flow-avh
# Linux: apt-get install git-flowgit flow init -d # 使用默认配置初始化仓库
默认分支名称为 master
(主分支)和 develop
(开发分支)。
2. 开发新功能(Feature)
git flow feature start FEATURE_NAME # 从 develop 创建分支 feature/FEATURE_NAME
# 开发完成后提交并合并
git flow feature finish FEATURE_NAME
-
合并规则:将
feature/*
分支合并到develop
,并删除原分支。 -
Commit 规范:
feat(scope): 简短描述功能 # 正文(可选,说明改动细节) # 脚注(可选,关联Issue或Breaking Changes)
3. 准备发布版本(Release)
git flow release start v1.0.0 # 从 develop 创建分支 release/v1.0.0
# 在 release 分支进行测试、版本号更新、文档完善等
git flow release finish v1.0.0
-
合并规则:
- 自动合并到
master
并打标签v1.0.0
。 - 同步回
develop
分支。 - 删除
release/*
分支。
- 自动合并到
-
Commit 规范:
chore(release): v1.0.0 - 更新版本号至 1.0.0 - 修复已知测试问题 [Issue #123]
4. 紧急修复生产问题(Hotfix)
git flow hotfix start v1.0.1 # 从 master 创建分支 hotfix/v1.0.1
# 修复后提交并完成
git flow hotfix finish v1.0.1
-
合并规则:
- 自动合并到
master
并打标签v1.0.1
。 - 同步回
develop
分支。
- 自动合并到
-
Commit 规范:
fix(auth): 修复用户登录失败问题 因 OAuth 令牌过期时间未正确刷新,导致会话失效。 解决方案:延长令牌有效期至 2 小时。 Closes #456
Commit Message 规范(Conventional Commits)
-
格式:
<类型>(<作用域>): <简短描述> [空行] <正文(可选)> [空行] <脚注(可选,如关联Issue)>
-
常用类型:
feat
: 新增功能fix
: 修复问题docs
: 文档变更style
: 代码格式/样式调整(不改变逻辑)refactor
: 重构代码(非功能变更)test
: 测试相关chore
: 构建/工具链变更
-
示例:
feat(checkout): 支持支付宝支付 新增支付宝 SDK 集成,用户可在结算页选择支付宝。 配置项见 `config/payment.js`。 Related to #789
最佳实践
- 分支命名:清晰标明类型和目的(如
feature/user-auth
)。 - 频繁同步:定期将
develop
分支合并到长期存在的feature
分支。 - 标签语义化:版本号遵循
语义化版本
(SemVer,主版本.次版本.修订号
)。 - Code Review:合并到
develop
或master
前需经过审核。
Git Flow 的变体
- GitHub Flow:简化版,仅用
master
和feature
分支,适合持续交付。 - GitLab Flow:引入环境分支(如
production
,staging
)。
根据团队规模和发布节奏选择合适的模型!