今天介绍一下工作中会用到的 Git 分支模型。

先贴上图以表敬意

闲言

在学校不管是自己写课程设计还是给老师做项目,有 2 到 3 个人一起协作开发时就会使用 Git ,但是只是简单用了它所提供的代码协作功能,在学校的项目,比如课程设计,开发完老师检查完就没有维护了,给老师做项目也是,基于项目的特征:没有持久性、一次性开发,所以没有应到 Git 分支模型。在企业中,一个应用往往是有比较长的生命线,由很多个迭代项目开发构成,这时要解决几十甚至几百人的代码协作问题,就需要一套完整的规范的代码开发流程。

我还记得当初大四的时候,去了一家企业实习,当时小团队只有 3 个开发人员,git 使用没有规范,只有一个 master 主分支,项目也没有管理规范,来一个需求点就做。当时经常出现代码覆盖,各种代码合并,线上代码也不知道是哪个节点的代码。。。到我走的时候,也没使用上这个分支模型。毕业后入职了某银行,不说分支模型了,Git 都没用上,直到今年跳槽到互联网公司才了解到这个分支模型。因此,你工作不一定会真正用到这个分支模型,如果是在互联网企业,很有可能会使用上。

有些小伙伴看到这张偌大的图觉得有些晕,很认真地说,这是一张大家都在用的图,特别是互联网企业。如果是还没有工作的小伙伴,可能有些陌生,没事,我们来看一下这些内容。

分支介绍

master :这个分支的代码是发布到生产的代码

develop :这个分支的代码是预发布到生产的代码

release :这个分支的代码是新版本发布到生产的代码

feature :这个分支的代码是新需求开发的代码

hotfix :这个分支的代码是紧急修复生产 bug 的代码

场景设想

下面列举一些可能你在工作中会经常面对的场景

  1. 组长分配新需求下来,安排下周上线(假设是 1227 号),你看看当前有没有下周版本的分支?有的话很简单,checkout 下周分支(feature_app1.1.0_1227)来开发就行,没有的话这时需要新建分支,从 develop 分支创建新的 feature 分支(feature_app1.1.0_1227),然后将对应的 pom.xml 版本号修改成 1.1.0-SNAPSHOT,注意命名,比如这里我用 feature 做前缀,你也可以自己设定一个规则。

  2. 开发完 feature_app1.1.0_1227 需求,移交了测试,很遗憾,测试出现了 n 个 bug,这时依旧在 feature_app1.1.0_1227 上修复 bug。

  3. 终于到了发版前一天,测试 MM 说 n 轮测试完了,没问题,拉上线版本,再做一次回归测试。这时,你就需要把 feature_app1.1.0_1227 分支合并到 develop 分支,然后从 develop 分支中创建新的分支 release_app1.1.0_1227,然后修改对应的版本号为 1.1.0-RELEASE。

  4. 到了发版日早上了,测试 MM 用了 release_app1.1.0_1227 版本测试了一番,又发现了一个 bug。别慌,只要不是生产的 bug,都好解决。这时你要在 release_app1.1.0_1227 修复 bug,切记不能在 feature_app1.1.0_1227 上修改,feature_app1.1.0_1227 分支已经没有多大作用了,只用来看代码提交记录。

  5. 安安全全的到了晚上,开始发版了,发完版突然发现了有异常,定位问题后发现是有一行代码写错了,跟组长确认后,在 release_app1.1.0_1227 分支上做了修改,重新打包后发版,验证了一段时间,没问题了。。。

  6. 发版总算完成了,这时,别忘记把 release_app1.1.0_1227 版本合并到 develop 和 master 分支。还有一点很重要的,把 develop 分支代码合并到 1227 以后的版本(如果已经有1227 以后的版本的话)。注意:这个步骤合并代码要谨慎,如果有别人的代码合并冲突比较大,需要找那个开发的同事一起合并代码。总算可以睡个好觉了。。。

  7. 告别了旧需求,迎来了新需求,接下来的需求开发就按上面的步骤走。。。

  8. 第二天,突然生产上一直报 NullPointerException,定位发现是一行代码没有判空导致的,三番确认,原来这个数据以前是不为空的,现在确实需要支持有些数据为空的,需要紧急修复这个 bug,和组长确认之后,从 master 分支上拉了一个 hotfix_app1.1.1_1228 分支代码,修复了 NullPointerException,打包后上线,验证没问题后,把 hotfix_app1.1.1_1228 分支合并到 develop 和 master 分支,并把 develop 分支合并到 1227 以后的版本。

好了,一大坨的文字描述了基于分支模型开发的过程。不同公司在应用过程中可能会有些微小的不同,但是整体流程都是差不多的。比如有的公司可能会把 release 合并到 master 后,用 master 代码发布到生产,发版当时有异常,再从 master 分支上拉 hotfix 分支进行修复。上面描述的步骤就不一样了,发版时出现异常,直接在 release 上修复。这些小的差别就不用计较太多啦。

希望本文能够让你认识到有这么一个标准的 Git 分支模型,在不管工作上还是学习上,在需要分支管理的时候,回忆起有这么一个图,根据你的场景再应用进去,肯定会少走很多弯路。

公众号原文: 成熟的 Git 分支模式

转载于:https://blog.51cto.com/7665794/2368065

Git 工作中怎么用?相关推荐

  1. git工作中常用命令

    基础 克隆代码 git clone http://xxx.git 克隆代码到b目录 git clone http://xxx.git b 拉取最新代码 git pull 分支 切换指定(develop ...

  2. g-git 相关命令 及其 基本原理探索(二):git 在工作中的常用命令操作 ,超级实用!!!

    上一篇git 基本原理对git的使用以及文件分布已经有了一个整体的了解. 本篇将对工作中常用的一些git 操作命令的操作进行总结归纳,方便今后查阅. 文章目录 1. 分离头指针 2. 通过HEAD 来 ...

  3. 收藏!工作中Git使用实践和常用命令流程合集

    来自:匠心Java 工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用 下面介绍一些git在工作中的一些使用实践.常用流程.常用命令,供大家参考! 一:前言 Git的定义是:分布式 ...

  4. 工作中必须要知道的git高级用法

    1. rebase变基 问题: 工作中我们一般是从master分支拉自己的开发分支开发,如果master分支被组长合并了其他同事的开发,也就是master分支ahead你的分支,我们这时一般不能直接提 ...

  5. 我在工作中是如何使用Git的

    大家好,我是若川.今天分享一篇关于git的好文章.我自己经常用命令行终端和git缩写.具体可以看我以往的文章.使用 ohmyzsh 打造 windows.ubuntu.mac 系统高效终端命令行工具, ...

  6. git add 所有修改文件_Git 技术干货!工作中quot;Gitquot;的使用实践和常用命令合集!

    作者:洋仔聊编程 出自:InfoQ 写作平台 原文:xie.infoq.cn/article/1ce91dc60431b1b8845729d41 工作中git是一项必不可少的技能,在项目的开发进程中起 ...

  7. 【Git】1090- 我在工作中是如何使用Git的

    本文首发于政采云前端团队博客:我在工作中是如何使用 Git 的 https://www.zoo.team/article/how-to-use-git 前言 最近在网上有个真实发生的案例比较火,说的是 ...

  8. 工作中遇见的git疑问整理

    1.git fetch,git merge,git pull,repo sync的区别 这些命令都用于将本地代码与远程存储库同步,但它们的实现机制和使用方式略有不同: git fetch 命令用于从远 ...

  9. 日常工作中常用的几个git指令

    前言 最近,我的主管让我就git 使用做个组内分享,分享一下我在日常工作中是如何使用git的.现在我整理成文章,分享出来,希望对你有所帮助. 基础概念 git有三个分区,分别是: 工作区(Workin ...

最新文章

  1. python游戏编程入门 免费-Python游戏编程入门4
  2. 拼接字符串 新增数据方法
  3. HTTP Status 405 - JSPs only permit GET POST or HEAD问题的分析和解决办法
  4. windows下的diskpart指令彻底格式化清除U盘
  5. cannot be deleted directly via the port API: has device owner network:floatingip
  6. 使用rem进行页面适配
  7. (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程
  8. 0928多线程运行——作业
  9. RDP大屏幕报表sql问题
  10. 组态软件与PLC远程控制的配置
  11. 【持续更新...】相关资源汇总
  12. Java实现Word转PDF【完整版】
  13. MIKE 21 教程 2.5 水动力模块教学:涡粘系数(Eddy viscosity),河床阻力与曼宁系数(Bed Resistance)
  14. 制作一个类“全能扫描王”的简易扫描软件(opencv)
  15. lower_bound( )和upper_bound( )的常见用法
  16. python-onvif实现客户端控制相机云台
  17. 配置微信公众号业务域名,解决“非微信官方网页,请确认是否继续访问”问题
  18. python 爬取简单静态网站之电影天堂
  19. Linux Nginx启动报错:Failed at step EXEC spawning /etc/rc.d/init.d/nginx: Exec format error.
  20. 自定义Windows 10开始菜单的10种方法

热门文章

  1. 洛谷 - 一些好玩的问题
  2. Python每日一练(5)-百词斩
  3. 清理电脑,使其加速!
  4. 基于Puppeteer的Chrome Recorder初试
  5. Intel深度摄像头RealSense D435(实感双目摄像头)和目标检测结合使用
  6. 【自然语言处理】Gensim中的Word2Vec
  7. 什么是ARPU与ARPPU ?
  8. Linux之时区修改
  9. Maltego 版本类型重新选择
  10. AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)