git分支管理和工作流规范:具体规范

前一篇介绍了 git相关的概念,我们可以查看文件的状态,在各个状态之间进行切换,可以创建和合并分支,通过rebase还可以整理自己的提交历史。通过这些命令和操作,就可完成工作流规范规定的操作流程了。

本篇介绍具体的规范,包括分支的划分和命名规范,不同类型的分支应对不同的场景,然后会介绍下工作流工具git-flow,如何简化我们的操作。

分支构成

master和develop分支一直存在,且名称不会变化,一般不直接修改这2个分支,由其他分支合并而来。

feature、release、hotfix分别用于功能点开发、优化,特定版本测试,线上问题紧急处理,同一类型的分支会产生多个。

分支划分如下:

  • master:与线上版本保持绝对一致;
  • develop:开发分支,由下文提到的release、feature、hotfix分支合并过后的代码;
  • feature:实际功能点开发分支,建议每个功能新建一个feature, 具有关联关系的功能公用一个feature分支;
  • release:每一次开发完成之后,从develop创建出来的分支,以此分支为基准,进行测试;
  • hotfix:该分支主要用于修复线上bug;

命名规范约定如下:

  • feature分支命名:feature/name
  • release分支命名:release/name
  • hotfix分支命名:hotfix/name

比如有一个「优化分布式Session」的需求,可在develop分支的基础上创建新分支 feature/optimize_distributed_session进行开发,开发完成后合并到develop分支。

分支详细介绍和处理流程

master分支

主分支,与线上运行的版本始终保持一致,任何时候都不要直接修改master分支。

一个版本的release分支、hotfix分支开发完成后,会合并代码到master分支,也就是说master分支主要来源于release分支和hotfix分支。

develop分支

开发分支,始终保持最新完成以及bug修复后的代码,新增功能时基于该分支创建feature分支。

一个版本的release分支、hotfix分支开发完成后,也会合并到develop分支,另外,一个版本的feature功能开发完成后,也会合并到develop分支。也就是说develop分支来源于feature、release、hotfix分支。

feature分支

开发新功能或优化现有功能时,会创建feature分支,以develop为基础创建。一般会有多个功能同时开发,但上线时间可能不同,在适当的时候将特定的feature分支合并到develop分支,并创建release分支,进入测试状态。

release分支

当一组feature开发完成,会首先合并到develop分支,开始进入提测阶段时,会创建release分支。

以release分支代码为基准提测,测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交。

测试完成之后,合并release分支到master和develop分支,此时master为最新代码,用作上线。

hotfix分支

线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。

特殊情况处理和注意点

develop分支已存在未上线的feature代码, 此时需要紧急上线一个新功能, 但develop的代码不能上,如何处理 ?

  • 以master为基线创建feature, 在完成之后,代码合并到master分支;
  • 为了保证develop是最新代码,需要从master合并到develop分支;

以develop为基线,创建了f1和f2两个feature分支之后, f1,f2开发一半的时候,发现两个分支代码需要有依赖怎么办 ?

  • 最好在开发开始前确定两个功能是否相关,若相关则只创建一个分支,两个功能在一起开发;
  • 如果已经创建,则需要合并到一个分支;

一定要保证commit历史记录的整洁,代码合并时,根据情况选择merge或rebase;

使用rebase注意,一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作;

提交说明规范:

  • 提交说明最好限制在一行以内,50个字符以下,简明扼要地描述更新内容,空开一行后,再展开详细注解;
  • 如果关联jira,写上jira地址;

git-flow工具

上面的流程在第一次接触时,会觉得有点复杂,通过git-flow工具可以把这些流程自动化。它是一个命令行工具,支持各个平台,比如OSX、Linux、Windows等支持。

初始化

通过 git flow init 命令进行初始化,以交互式的方式进行,主要是约定分支的命名,建议使用默认值;

开发新功能

git flow feature start f1 添加新特性,这个操作创建了一个基于develop的特性分支,并切换到这个分支之下。

git flow feature finish f1 完成新特性,这个操作会合并f1分支到develop分支,并删除特性分支,切换回develop分支。

git flow feature publish f1 发布新分支,发布新特性分支到远程服务器,其它用户也可以使用这分支。

发布版本

git flow release start r1 [BASE] 创建发布版本,[BASE]是以哪个分支或commit为基础进行发版,一般为develop。

git flow release publish r1 发布release分支,其他同事就可以看到这个分支,并修改一些小问题。

git flow release finish r1 完成release分支,会合并release分支到master分支,用release分支名打Tag,合并release分支到 develop分支,最后移除release分支。

修复线上问题

有可能需要修正 master 分支上某个 TAG 标记的生产版本。

git flow hotfix start VERSION [BASENAME] 创建hotfix分支,VERSION 参数标记着修正版本,[BASENAME]为finish release时填写的版本号。

git flow hotfix finish VERSION,当完成紧急修复分支,代码合并到develop和 master分支。相应地,master分支打上修正版本的 TAG。

欢迎扫描下方二维码,关注我的个人微信公众号,查看更多文章 ~

公众号:情情说

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

linux系统性能监控与优化(2)–cpu

cpu scheduler负责调度两种资源:线程和中断 按优先级从高到低: 1)中断:设备告诉内核它们已经处理完成:如网卡发送完成了一个...

2165
来自专栏钟绍威的专栏

硬连接与软连接,inode与links当访问一个文件的时候,发生了什么INODE的内容建一个硬连接发生了什么?访问硬连接的过程注意建一个软连接发生了什么?访问一个软连接注意

硬连接和软连接,第一感觉就像是window的快捷方式,实则不然 要说硬连接和软连接,那就必须了解inode和block以及分区了 EXT文件系统在创建分区的时候...

1979
来自专栏雨过天晴

原 荐 IntelliJ IDEA系列编辑器

3503
来自专栏JavaEdge

从零开始的电商后台世界(更新 ing)2 预备知识储备3 前端框架的分析5 React 框架基础

1953
来自专栏后端技术探索

最简单实现跨域的方法:使用nginx反向代理

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

1521
来自专栏web编程技术分享

【php增删改查实例】第二十五节 - 在main.php中显示头像

1833
来自专栏云计算教程系列

如何在Ubuntu上找到Redis日志

日志对于Redis安装的故障排除至关重要。你可能会问自己“我的Redis在哪里登录?” 或者“Redis在Ubuntu 14.04上存储日志文件的位置是什么?”

8753
来自专栏开源优测

AutoLine开源平台常见问题解答

答:AutoLine基于Python3开发,不兼容Python2,最低要求Python3.4版本

1022
来自专栏JavaEE

springboot项目打包&ngrok的使用

接触spring boot有一段时间了,但是一直未打包部署过spring boot项目,因为其内置tomcat,所以打包部署方式有所不同。还有ngrok,是一个...

752
来自专栏性能与架构

如何高效查看 Docker 日志

开发基于 Docker 的应用时,用好 log 可以大大提高排错效率,下面就是几个常用的 log 操作技巧:

2.8K3

扫码关注云+社区

领取腾讯云代金券