一、简介
Git主要优点有:
分布式存储 , 本地仓库包含了远程仓库的所有内容 ,安全性高。
优秀的分支模型 , 创建/合并分支非常的方便,由于代码本地都有存储 , 所以从远程拉取和分支合并时都非常快捷
但是当分支过多时 , 又要如何管理这些分支呢 ? 我们可以采用了Git Flow的模式。
GitFlow工作流定义了一个围绕项目发布的严格分支模型,它为不同的分支分配了明确的角色,并定义分支之间何时以及如何进行交互。
GitFlow是一套基于git的工作流程,这个工作流程围绕着项目发布定义了一个严格的如何建立分支的模型。
二、分支介绍
在Git Flow 中,共有 master 、develop 、feature 、release、hotfix这五个分支。
-
master分支
:
主分支 , 产品的功能全部实现后 , 最终在master分支对外发布。该分支为只读唯一分支 , 只能从其他分支合并 , 不能在此分支修改。另外所有在master分支的推送应该打标签做记录,方便追溯。 例如release合并到master , 或hotfix合并到master。 -
develop分支
:
主开发分支 , 基于master分支克隆,包含所有要发布到下一个release的代码,该分支为只读唯一分支 , 它只能通过与其他分支合并来更新内容,禁止直接在develop分支进行修改。 -
feature分支
:
功能开发分支 , 基于develop分支克隆 , 主要用于新需求新功能的开发,功能开发完毕后,合并到develop分支。feature分支可同时存在多个 , 用于团队中多个功能同时开发 , 属于临时分支 , 功能完成后可选择删除。 -
release分支
:
测试分支 , 基于feature分支合并到develop之后 , 从develop分支克隆下来的。主要用于提交给测试人员进行功能测试 , 测试过程中发现的BUG在本分支进行修复 , 修复完成上线后合并到develop/master分支并推送(完成功能) , 属于临时分支 , 功能上线后可选择删除。 -
hotfix分支
:
补丁分支 , 基于master分支克隆 , 主要用于对线上的版本进行BUG修复,修复完毕后合并到develop/master分支并推送 , 该分支也属于临时分支 , 补丁修复上线后可选择删除。
各个分支的运行情况:
![](https://i-blog.csdnimg.cn/blog_migrate/23cc6277204d97cc94739e060f9448a4.png)
三、GitFlow的工作流程
一 、创建远程仓库,并拉到本地
创建远程仓库的时候默认是创建master分支的,因此拉下来的项目也处于master分支。
git clone 仓库地址
二、develop分支
由于master分支上面是不允许进行开发的,因此创建长期开发分支develop
- 创建并且切换到develop分支
git checkout -b develop
- 将 develop 分支推送到远端仓库
git push -u origin develop
三、 Feature 分支
-
通过develop新建feature分支
git checkout -b feature-a origin/develop
-
将分支推送到远端仓库
git push -u origin feature-a
-
在feature-a分支下修改文件,并进行提交
git add .
git commit -m 'feature-a 提交'
-
提交至远程仓库
新功能完成之后需要将feature分支合并到develop分支,并push到远程仓库(在push之前,建议先拉取一下本地的develop分支内容更新到最新版本,然后再push,避免线上版本与你commit时候文件内容产生冲突)
-
拉取远端仓库 develop 分支合并到本地 develop 分支
git pull origin develop
-
切换到 develop 分支
git checkout develop
-
将 feature 分支合并到 develop 分支
git merge feature-a
-
将分支推送远端仓库
git push
-
删除 Feature分支
git branch -d feature-a
四、Relase分支
当新功能基本完成之后,我们要开始在release分支上测试新版本
- 从创建 relase 分支并切换到 Relase 分支上
git checkout -b release/1.1.0 develop
- 将分支推送到远程(如果有必要)
git push origin release/1.1.0:release/1.1.0
- 切换到 master / develop 分支上
git checkout master
- 合并 release-1.1.0 分支
git merge release-1.1.0
- 推送到远端仓库
git push
- 删除 release-1.1.0 分支
git branch -d release-1.1.0
五、Hotfix分支
在master分支根据具体的问题创建hotifix分支
- 创建hotifix分支,并推送到远程
git checkout master
git checkout -b hotfix
git push origin hotfix:hotfix
- 制定版本号,一般最后位加1,修正后commit并将本地的hotfix分支更新为线上最新的版本
git commit -m "..."
git pull origin hotfix
- 将刚修复的分支合并到开发分支和主分支
//切换到开发分支 / 主分支
$ git checkout develop / master
//合并
$ git merge hotfix
- 为主分支打上版本标签并推送
git tag -a "1.2.1" HEAD -m "fix typo"
将标签推送到远端仓库
git push --tags
报错处理:
删除远程仓库分支:git push origin --delete develop
想要删除远程仓库中的develop分支,出现错误原因是删除命令被远程仓库拒绝,因为当前远程分支为: develop
解决:
- 登录你的 github 中进入 Repository 页面,找到对应的远程仓库
- 点击 Setting页面,选择 Branchs,找到 Default branch 项,就能查看和修改默认分支了。
- 修完完毕之后,不要忘记点击旁边的 update 按钮,update一下才能生效。