原文:
https://blog.csdn.net/xingbaozhen1210/article/details/81386269
https://www.cnblogs.com/jtlgb/p/9685553.html
https://www.cnblogs.com/iBrand2018/p/8708740.html
https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md#23-gitflow工作流
GIT分支
-
master:主分支
-
develop:主开发分支
由feature分支合并 -
feature:功能开发分支
克隆自develop分支
功能开发完,合并到develop分支
用于新需求新功能的开发 -
release:测试分支
克隆自develop分支(在feature分支合并到develop之后)
测试到有BUG,在本分支修改
BUG修改完成后,推送到develop/master分支并推送(完成功能) , 打Tag -
hotfix:补丁分支
克隆自master分支 ,
主要用于对线上的版本进行BUG修复
主要工作流程
-
创建项目
初始化项目,拉取第一个develop分支。(初始化gitflow项目会默认创建一个master分支) -
功能开发
从develop,拉取feature分支,进行开发。(多个开发人员可拉取多个feature) -
开发完成,提交代码
feature开发完成,合并到develop分支。 -
功能测试
从develop拉取,release分支。 -
测试完成,提交代码,上线
合并release分支,到develop/master并推送 -
上线后,BUG修复
从master拉取,hotfix分支,进行BUG修复 -
BUG修复完成,提交代码,上线
合并hotfix分支,到develop/master并推送
有两种特殊流程
-
当进行一个feature时,若develop分支有变动
如其他开发人员完成功能并上线,则需要将完成的功能合并到自己分支上
即合并develop到当前feature分支 -
当进行一个release分支时,若develop分支有变动
如其他开发人员完成功能并上线,则需要将完成的功能合并到自己分支上
即合并develop到当前release分支
(!!! 因为当前release分支通过测试后会发布到线上 , 如果不合并最新的develop分支 , 就会发生丢代码的情况)
Git Flow 图形化工具
- SourceTree
- GitFlow for Visual Studio
分支命名规范
- feature分支,以"feature_"开头,如 feature_v1.1
- release分支,以"release_"开头,如 release_v1.1
- hotfix分支:以"hotfix_"开头,如 hotfix_20160112
tag标记:如果是release分支合并,则以"release_"开头。如果是hotfix分支合并,则以"hotfix_"开头。
master分支每次提交都要打tag,release tag:如release_v1.1,hotfix tag:如hotfix_20160112
命名都统一采用小写。
一些其它要点
- 用于新建发布分支的分支: develop
- 用于合并的分支: master
- 分支命名: release-* 或 release/*
一个很棒的总结
1,一定要按git flow的流程去管理分支,如feature分支开发完要合并到develop,如果要发布版本到test环境,则从develop拉出一个release分支,release完成后要合并回master和develop分支,修复生产环境问题需要从master拉出一个hotfix分支,hotfix完成后要合并回master和develop分支,并且在master打上tag。
2,一定要按分支命名规范来命名,便于管理和维护。
3,了解了git flow工作流程后,可以不使用git flow GUI工具,手动操作即可,可以是原生git命令+vs配合操作,比如给master打tag就要用git命令,这在vs里操作不了的,比如合并分支,虽然也可以使用git命令实现,但在vs里操作更方便直观。
4,一定要保持分支的纯净,不要随便污染分支。比如,develop分支只包含要发布到下一个release的代码,在没有拉出release分支前不要合并新的feature分支进来。release分支基于develop分支创建,拉出release分支后,我们可以在这个release分支上测试和修复bug,但是,一旦打了release分支后不要从develop分支合并新的改动过来。develop拉出release分支的同时,也意味着develop分支可以开始下一个release的准备工作了。
5,如果多个版本并行到test环境,怎么解决这个问题?如下图