注:master分支正在被main分支取代。
简介
Git Flow是构建在Git之上的一个组织软件开发活动的模型,是在Git之上构建的一项软件开发最佳实践。Git Flow是一套使用Git进行源代码管理时的一套行为规范和简化部分Git操作的工具。
gitflow示意图
Git Flow常用分支
master:
- master分支存放的是随时可供在生产环境中部署的稳定版本代码
- master分支保存官方发布版本历史,release tag标识不同的发布版本
- 一个项目只能有一个master分支
- 仅在发布新的可供部署的代码时才更新master分支上的代码
- 每次更新master,都需对master添加指定格式的tag,用于发布或回滚
- master分支是保护分支,不可直接push到远程仓master分支
- master分支代码只能被release分支或hotfix分支合并
develop:
- develop分支是保存当前最新开发成果的分支
- 一个项目只能有一个develop分支
- develop分支衍生出各个feature分支
- develop分支是保护分支,不可直接push到远程仓库develop分支
- develop分支不能与master分支直接交互
feature:
- 分支的命名格式必须功能名,例如v1.0.0-login,login-20201109,
- 以功能为单位从develop拉一个feature分支
- 每个feature分支颗粒要尽量小,以利于快速迭代和避免冲突
- 当其中一个feature分支完成后,测试通过,合并回develop分支
- 当一个功能因为各种原因不开发了或者放弃了,这个分支直接废弃,不影响develop分支
- feature分支只与develop分支交互,不能与master分支直接交互
release:
- 命名规则:release/,“”以本次发布的版本号为标识
- release分支主要用来为发布新版的测试、修复做准备
- 当需要为发布新版做准备时,从develop衍生出一个release分支
- release分支可以从develop分支上指定commit派生出
- release分支测试通过后,合并到master分支并且给master标记一个版本号
- release分支一旦建立就将独立,不可再从其他分支pull代码
- 必须合并回develop分支和master分支
hotfix:
- 命名规则:hotfix/,“”以本次发布的版本号为标识
- hotfix分支用来快速给已发布产品修复bug或微调功能
- 只能从master分支指定tag版本衍生出来
- 一旦完成修复bug,必须合并回master分支和develop分支
- master被合并后,应该被标记一个新的版本号
- hotfix分支一旦建立就将独立,不可再从其他分支pull代码
gitflow角色介绍:
- 功能开发者:模块中功能分支的开发;
- 测试管理员:测试团队担当;
- 项目管理员:项目开发组长(team leader)担当;
分支说明
名称 | 说明 | 命名规范 | 命名示例 | 合并目标 | 合并操作 | 操作者 |
master | 线上稳定版本 | master | master | 回合develop | – | 项目管理员 |
release | 待发布分支,下个版本需上线的版本 | release/xxx | release/v1.0.0 | master/develop | merge request | 项目管理员 |
develop | 当前正在开发的分支 | develop | develop | release | merge request | 功能开发者/测试管理员 |
feature | 功能分支,每个功能需分别建立自己的子分支 | feature/版本号(日期)-功能名 | feature/v1.0.0-Login | develop | merge request | 功能开发者 |
hotfix | 紧急修复分支 | hotfix/xxx | hotfix/v1.0.1 | master/develop | merge request | 功能开发者 |
gitflow代码示例
创建develop分支
git branch develop
git push -u origin develop
开始新Feature开发
git checkout -b some-feature develop
# Optionally, push branch to origin:
git push -u origin some-feature
# 做一些改动
git status
git add some-file
git commit
完成Feature
git pull origin develop
git checkout develop
git merge --no-ff some-feature
git push origin develop
# 删除Feature分支,建议保留
git branch -d some-feature
# If you pushed branch to origin:
git push origin --delete some-feature
开始Relase
git checkout -b release-0.1.0 develop
完成Release
git checkout master
git merge --no-ff release-0.1.0
git push
git checkout develop
git merge --no-ff release-0.1.0
git push
# 删除Feature分支,建议保留
git branch -d release-0.1.0
# If you pushed branch to origin:
git push origin --delete release-0.1.0
git tag -a v0.1.0 master
git push --tags
开始Hotfix
git checkout -b hotfix-0.1.1 master
完成Hotfix
git checkout master
git merge --no-ff hotfix-0.1.1
git push
git checkout develop
git merge --no-ff hotfix-0.1.1
git push
# 删除Feature分支,建议保留
git branch -d hotfix-0.1.1
git tag -a v0.1.1 master
git push --tags
Git flow工具
OS X: brew install git-flow
Linux: apt-get install git-flow
Windows: wget -q -O - --no-check-certificate https://github.com/nvie/gitflow/raw/develop/contrib/gitflow-installer.sh | bash
使用
- 初始化: git flow init
- 开始新Feature: git flow feature start MYFEATURE
- Publish一个Feature(也就是push到远程): git flow feature publish MYFEATURE
- 获取Publish的Feature: git flow feature pull origin MYFEATURE
- 完成一个Feature: git flow feature finish MYFEATURE
- 开始一个Release: git flow release start RELEASE [BASE]
- Publish一个Release: git flow release publish RELEASE
- 发布Release: git flow release finish RELEASE别忘了git push --tags
- 开始一个Hotfix: git flow hotfix start VERSION [BASENAME]
- 发布一个Hotfix: git flow hotfix finish VERSION
结语
规矩是死的人是活的,当你对git非常熟悉之后,在不同的项目开发中可以灵活的使用git管理。每家公司对自己的git也可能有自己的一套管理规范。注意不要 删库跑路 !