理解 Git 分支管理最佳实践html
在进行分支管理讲解以前,咱们先来对分支进行一个简单的分类,并明确每一类分支的用途。git
feature/功能名称
,做为新功能的开发分支,该分支从 develop 建立,开发完毕以后须要从新合并到 develop;release/v+发布的版本号
,做为预发布分支,release/* 只能从 develop 建立,且在 git flow 中同一个时间点,只能存在一个预发布分支。只有当上一个版本发布成功以后删除该分支,以后才能进行下一个版本的发布。若是在预发布过程当中发现了问题,只能在 release/* 分支上进行修改;hotfix/v+bug修复的版本号
,做为热修复分支,只能从 master 分支分离出来。主要是用来修复在生产环境上发现的 bug,修复完成并测试经过后须要将该分支合并回 develop 及 master 上,并删除该分支;在上一部分,咱们已经明确了每一个主分支及辅助分支的用途与来源了,下面咱们就来详细了解一下 Git 分支管理的整个流程。
先来看一下分支在完整的功能开发中是如何演变的:github
从上图咱们能够看出,咱们同时开始了两个功能的开发/研究任务,下面我将以此为基础来说解分支管理的流程。post
先拉取最新的 develop 分支,而后以最新的 develop 为基准建立两个新的功能分支 feature/f1 和 feature/f2;测试
git pull origin develop
git checkout -b feature/f1 develop
开发人员在各自的功能分支上进行开发工做,等当前功能分支开发完以后,将当前分支交由测试人员进行测试,测试过程当中的问题修复及功能修改均在当前功能分支上进行;spa
当 feature/f1 上的开发及测试任务均完成以后,将 feature/f1 合并回 develop ,并删除 feature/f1 ;.net
git checkout develop git merge --no-ff feature/f1 git branch -d feature/f1
从 develop 分支建立新的预发布分支 release/0.2,并部署到预发布环境上测试。在预发布过程当中发现问题则直接在 release/0.2 上进行修复;code
git checkout -b release/0.2 develop
在生产环境中发现一个 bug,从 master 上分离出一个热修复分支 hotfix/bug1,并在上面进行修复、测试并在预发布环境中验证,当都验证经过以后将分支从新合并回 develop 及 master,并在 master 上打一个热修复 tag v0.1.1,最后删除 hotfix/bug1;htm
git checkout -b hotfix/bug1 master .................... ....修复bug..ing.... .................... git checkout develop git merge --no-ff hotfix/bug1 git checkout master git merge --no-ff hotfix/bug1 git tag v0.1.1 git branch -d hotfix/bug1
在 feature/f2 分支上的功能 f2 已经开发并测试完成,而后将 feature/f2 合并回 develop,并删除 feature/f2,此时已经存在新功能 f1 的预发布分支 release/0.2,因此须要等待其发布完成以后才能建立预发布分支 release/0.3;blog
git checkout develop git merge --no-ff feature/f2 git branch -d feature/f2
预发布分支 release/0.2 在预发布环境中彻底测试经过,随时能够部署到生产环境。但在部署到生产环境以前,须要将分支合并回 develop 及 master,并在 release/0.2 上打一个正式发布版本的 tag v0.2,最后删除 release/0.2;
git checkout develop git merge --no-ff release/0.2 git checkout master git merge --no-ff release/0.2 git tag v0.2 git branch -d release/0.2
当前已经不存在 release/* 预发布分支,因此能够开始功能 f2 的预发布上线。建立预发布分支 release/0.3,并部署预发布环境测试;
git checkout -b release/0.3 develop
分支 release/0.3 测试经过,将 release/0.3 合并回 develop 及 master,而后在 master 上打一个正式发布版本的 tag v0.3,最后删除 release/0.3;
上述过程当中未使用到 git flow,均是以约定的规范流程进行,你们能够尝试使用 git flow 来管理分支。
#初始化 git flow # 设置 feature、release、hotfix、tag 的前缀名 git flow init #开始一个新功能 f1 的开发,以 develop 为基准建立 feature/f1 git flow feature start f1 #.................... #....f1 功能开发中.... #.................... #新功能 f1 开发完成 # 合并回 develop # 删除 feature/f1 分支 git flow feature finish f1 #开始新功能 f1 的预发布验证,版本定为 0.2 git flow release start 0.2 #新功能 f1 预发布验证经过 # 合并到 master 分支 # 在 release 上打 tag v0.2 # 将 tag v0.2 合并到 develop 分支 # 删除 release/0.2 分支 git flow release finish 0.2 #开始 bug1 的修复,以 master 为基准建立 hotfix/bug1 git flow hotfix start 0.2.1 # bug1 修复完成 # 合并到 master 分支 # 在 hotfix 上打 tag v0.2.1 # 将 tag v0.2.1 合并到 develop 分支 # 删除 hotfix/0.2.1 分支 git flow hotfix finish 0.2.1
至此,Git 分支管理的整个流程已经讲解完,有兴趣的能够看一下具体的分支管理演示 https://github.com/alienwow/gitbranchmanage。
若是有上述讲解中任何不正确的地方,欢迎你们批评指正,若有疑问欢迎一块儿讨论。
Vincent Driessen A successful Git branching model
Joe Guo 介绍一个成功的 Git 分支模型