前端开发-Gitflow简易版

Simple Gitflow

业务越来越复杂,分支也越来越多,为提高效率和规避流程错误,商定一个统一的工作流程是至关重要的。

先上图~

gitflow-simple.png

分支

Master

  • 它是一个长期分支,存在于整个项目周期。

  • master分支上不允许任何代码提交,只能由负责人进行分支合并。

  • 该分支存放的应该是随时可供在生产环境中部署的代码。

Feature

  • 临时分支,用于开发新功能,不同业务可创建多个feature分支。
  • master分支创建,开发测试完成,合并至release分支后删除。

Release

  • 临时分支,用于预发布或回归测试。
  • master分支创建,发布后打tag合并至master后删除。
  • 命名建议:release/1.x.x

Hotfix

  • 临时分支,用于修复线上问题。
  • master分支创建,发布后打tag合并至master后删除。
  • 命名建议:hotfix/bugName

为什么没有develop分支?

develop分支的职责已经分配到了featurehotfix分支,这样临时分支的修改也不用同步到两个分支(develop和master),为避免混淆,所以移除了develop分支。

场景1:多个feature并行开发

假设5月收到需求,我们要做群密聊,计划6月上线,并且在群密聊上线前,有个0528优化版本要上。

好了,场景有了,来看看具体流程怎么操作。

  1. 创建feature分支

master分支分别创建feature/groupSChat、feature/me0528,命名最好贴合业务。

git checkout master
git branch feature/groupSChat
git branch feature/me0528

分支建好后,就进入开发和测试阶段;在经历N次提交和测试后准备上线。

  1. 创建release分支

假设5月份版本是5.5.5 ,从master分支创建release/5.5.5分支,然后合并feature/me0528分支。

// 从master分支创建release/5.5.5分支并切换到该分支
git checkout master
git checkout -b release/5.5.5
git merge feature/me0528
git branch -d feature/me0528
  1. 打包上线-5.5.5版本

release/5.5.5分支进行最终测试后上线,我们打上tag并合并到master,然后删除release/5.5.5分支。

git checkout master
git merge release/5.5.5
git tag v5.5.5
git branch -d release/5.5.5

注意,到现在虽然5.5.5版本上线了,隔壁分支feature/groupSChat还在紧张开发中,但它丝毫没有受到影响。

  1. 群密聊feature,在经过N次提交和测试后,准备上线

假设群密聊版本是6.0.0,master分支创建release/6.0.0分支,然后合并feature/groupSChat分支。

git checkout master
git checkout -b release/6.0.0
git merge feature/groupSChat
git branch -d feature/groupSChat
  1. 打包上线-6.0.0版本

release/6.0.0分支进行最终测试后上线,我们打上tag并合并到master,然后删除release/6.0.0分支。

git checkout master
git merge release/6.0.0
git tag v6.0.0
git branch -d release/6.0.0

到这里,我们并行开发的两个feature都上线了;开发过程中我们创建的feature、release等分支,也随发版后删除了,仓库里只是多了两个tag标签。

场景2:紧急修复线上bug

假设在场景1中,刚开始做feature/me0528和feature/groupSChat功能不久,就发现线上版本有严重问题,领导要求马上修复后上线。这时你可能会想,我已经有两个分支在开发了,该咋办呢?别担心,你还有master分支,它存放着可供在生产环境中部署的代码。

  1. 创建hotfix分支

假设这个严重问题是导致通讯录用不了,contact not work ?

git checkout master
git branch hotfix/contactNotWork
  1. 打包上线-5.5.1版本
git checkout master
git merge hotfix/contactNotWork
git tag v5.5.1
git branch -d hotfix/contactNotWork
  • 首先,这里假设线上版本为5.5.0,bug修复后发版为5.5.1
  • 与feature分支不同的是,hotfix分支的代码基于稳定的功能,测试完毕后不需要通过release分支即可发布上线。

小结

  • 除了master分支,其它都是临时分支,仓库中只有master分支和正在开发的feature分支,便于维护。
  • 临时分支都是从master分支创建的
  • feature分支通过测试后才创建并合并到release分支。
  • 通过创建release分支,能有效避免丢失已上线的功能或bug修复代码。
  • 场景中分支合并示例使用的git merge,当然你也可以用git rebase,关于二者的区别可参考文末链接。

Thanks

关于本文的由来,首先要感谢 骐彰同学提供的思路,和现有团队的支持,才促使我整理了这篇文章,感谢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Git分支管理 master:主分支,当前分支上的代码随时可以直接发布,并且只能通过Pull Request从其他...
    UEUEO阅读 9,778评论 5 33
  • 原文推荐: A successful Git branching model 这个文章讲的是Git分支模型的原理及...
    SonyaBaby阅读 1,536评论 0 0
  • Git 仓库申请流程 1. 开发主管向Git 管理员提交Git 仓库申请【邮件:发送给Git 管理员,抄送给项目经...
    骚包霸天虎阅读 2,131评论 0 0
  • 忽然觉得有些事情并不如我想象的那样发生,并没有当初我想的那么美好了。比如爱情,比如友情,比如亲情。 我觉得,只要两...
    绳命是入刺的井猜阅读 139评论 0 0
  • 话说已经好久没来九龙谷了,上次过来的时候,那是一个阴雨天,记忆深刻的是当时暴雨倾盆,我和儿子快速的像豹子一样,在深...
    丹尼尔李S阅读 357评论 0 3