# 分支管理
前面提交、推送操作都是在“master”分支进行的。针对一个不断迭代的复杂项目，如果全部都在“master”上操作，版本的结构会乱，其他人看不懂哪个提交是稳定的，是生产下发版本，哪个提交是尚在开发版本。  
针对这一问题，下面介绍Git flow分支模型，大家不一定要严格套这个模型。  
## Git Flow
模型的分支如下：
- master
- develop
- feature/xxx
- hotfix/xxx
- release/xxx

它们的流程图如下：  
![](./git_flow.png)  
## master
- master主分支，代码库应该有一个、且仅有一个主分支，主分支存放最稳定的程序版本
- 所有用于正式生产下发的版本都应该在master分支上发布
- 不能直接在master分支上修改提交，只能从其它分支合并
- 所有在master上的提交应该标记tag
## develop
- develop分支是主开发分支 
- 用于合并来自feature分支的程序
- 从该分支创建release分支
- 接收来自release和hotfix分支的优化
## feature
- 用于新功能的开发
- 从develop分支签出
- 开发完后合并到develop
## hotfix
- 用于紧急修复现场出现的bug
- 从master签出
- 完成修复后要双向合并到master和develop
## release
- 用于准备版本发布
- 从develop分支签出
- 等测试组测试通过，双向合并到master和develop
## 其他说明
远程仓库应该只存在两个分支，一个是master分支，存放生产环境版本，这个分支的代码总是可靠可用的；另一个是develop分支，这个分支用于日常开发。   
hotfix分支、feature分支和release分支都在本地，原则上不能推送到远程仓库。这三种分支都属于临时性需要，使用完以后，应该删除。  
develop分支下允许有多个feature分支，且尽量避免冲突；允许在有feature处在开发中的情况下从develop分支拉取到release分支。

# 分支操作
## 创建分支
在工程目录下右键菜单选择“TortoiseGit”，点击“创建分支”。  
![](./git_create_fork.png)  
输入分支名称。“切换到新分支”可选，后面可以手动切换。点击“确认”新分支便创建成功。
## 切换分支
想要在某个分支上做修改提交，首先要切换到该分支。
在工程目录下右键菜单选择“TortoiseGit”，点击“切换/检出”。  
![](./git_checkout.png)  
选择分支，点击确认。  
## 创建标签
master分支提交后要加一个标签，用来表示版本号。  
在工程目录下右键菜单选择“TortoiseGit”，点击“创建标签”。
输入标签名称，选择分支即可。  
![](./git_tag.png)   
## 分支推送
当某个分支提交的差不多了，就可以推送了。  
之前推送的是master分支，现在可以选择本地的其他分支。  
![](./git_fork_push.png)  
值得注意的是“包括标签”选项，按照模型，master分支需要标记Tag版本号，master分支推送时勾选该选项可以将Tag同步到服务器。