git master主分支_Git分支管理策略及简单操作

前几天整理了一下之前项目的开发代码,当时使用了Git来进行代码版本管理。虽然本人熟悉常用的Git操作,但是对分支的管理经验非常欠缺。拿这个项目来说,在项目中有不下20个分支,每个分支间的继承关系相当之混乱,非常不利于代码的安全管理。因此,通过在网络上的学习,总结了一下关于Git分支管理的策略方法,供后续回顾学习。当然必须承认,代码分支管理策略有很多种,不局限于以下介绍。但是下面介绍的这个分支管理策略非常具有工程借鉴意义,几乎适用于所有开发场景。

命名规范

a0fae6e8fc32d9d852539f1f661d737e.png

主分支master

首先,代码库应该有且仅有一个主分支。所有提供给用户使用的正式版本,都在这个主分支上发布。Git主分支的名字,默认为master。它是自动建立的,版本库初始化以后,默认就是在主分支在进行开发。团队成员从主分支(master)获得的都是处于可发布状态的代码。

开发分支develop

日常开发应该在另一条分支上完成。我们把开发用的分支,叫做develop分支。开发分支应该总能够获得最新开发进展的代码。如果想正式对外发布,就在master分支上,对develop分支进行merge。简要步骤如下:

# 在master分支上创建develop分支git checkout -b develop master# 切换到master分支git checkout master# 对develop分支合并到当前master分支git merge --no-ff develop

临时分支

除了常设分支以外,还有一些临时性分支,用于应对一些特定场景开发。临时性分支主要有三种:

  • 功能(feature)分支

  • 预发布(release)分支

  • 修补bug(hotfix)分支

这三种分支都属于临时性需要,使用完以后,最好删除,使得代码库的常设分支始终只有master和develop。

Feature分支

feature分支是为了开发某种特定功能,从develop分支上面分出来的。开发完成后,要再并入develop。该分支可以采用feature-xxx的形式命名。简要步骤如下:

# 从develop创建一个功能分支git checkout -b feature-x develop# 开发完成后,将功能分支合并到develop分支:git checkout developgit merge --no-ff feature-x# 删除feature分支git branch -d feature-x

e57b1ce401b60c3774d61b400bedbe41.png

Release分支

release分支是指发布正式版本之前(即合并到master分支之前),我们可能需要有一个预发布的版本进行测试而从develop创建的分支。预发布结束以后,须合并进develop和master分支。它的命名,可以采用release-xxx的形式。

# 创建一个预发布分支git checkout -b release-x develop# 确认没有问题后,合并到master分支git checkout mastergit merge --no-ff release-x# 对合并生成的新节点,做一个标签git tag -a 1.2# 再合并到develop分支git checkout developgit merge --no-ff release-x# 最后,删除预发布分支git branch -d release-x

Hotfix分支

软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进master和develop分支。它的命名,可以采用hotfix-xxx的形式。
# 创建一个修补bug分支git checkout -b hotfix-x master# 修补结束后,合并到master分支git checkout mastergit merge --no-ff hotfix-xgit tag -a 0.1# 再合并到develop分支git checkout developgit merge --no-ff hotfix-x# 删除"修补bug分支"git branch -d hotfix-x

14ef0e086e28a7a5bdf2e438b10798cf.png

总结

上面许多指令使用的--no-ff的意思是no-fast-farward的缩写,使用该命令可以保持更多的版本演进的细节。如果不使用该参数,默认使用了fast-farword进行merge。两者的区别如下图所示:

6794637f6e559766492bda6e2bbdf6ae.png

最后分享一下整体的分支管理策略图示:

dfd8fea94ac1af7b249f3a91c1edb0cd.png

公众号回复git获取「分支管理策略图」

参考资料


https://nvie.com/posts/a-successful-git-branching-model

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java在什么环境变量_Java-环境变量

很多同学不太明白环境变量的到底是什么具体有什么用? 这里阿风为不太明白的同学介绍一下.首先我们打开环境变量的位置.,这里以win10系统作为介绍在桌面邮件属性,如下然后点击高级系统变量接着点击环境变量然后你就能看到环境变量的具体设置界面了如图所示,环境变量分为用户变量…

git rebase用法_Git入门实战

如果给所有软件列出一个排行榜的话,那么Git定会名列前茅。Git对于代码项目的管理是具有划时代意义的,向Linus致敬,不但写出了可以与Windows争锋的Linux系统,还设计实现了如此强大的版本管理工具。当我了解Git后,真后悔…

linux md5 加密字符串和文件方法

linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位…

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目(5.5) 登录功能的实现,完善登录功能...

索引 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引 简述 今天我们来完善我们的登录功能 项目准备 我们用的工具是:VS 2013 SqlServer 2012 IIS7.5 希望大家对ASP.NET MVC有一个初步的理解,理论性的…

jsonobject转list集合_怎样优雅的操作集合,CollectionUtils工具类正确使用姿势

点击上方"码之初"关注,选择"设为星标"与精品技术文章不期而遇来源:cnblogs.com/qdhxhz/p/10787130.html这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUtils。个人觉得CollectionUtils在真实项…

[c#基础]使用抽象工厂实现三层

引言 昨天加了一天班,今天闲来无事,就在想如何将之前的三层和最近一直在学的设计模式给联系在一起,然后就动手弄了个下面的小demo。 项目结构 项目各个层实现 Wolfy.Model层中有一个抽象类BaseModel.cs,User.cs是用户实体类&#…

场效应管原理_场效应管——不就是一个电控开关?

管在mpn中,它的长相和我们常面讲的三极管非常像,所以有不少修朋友好长时间还分不清楚,统一的把这些长相相同的三极管、场效应管、双二极管、还有各种稳压IC统统称作“三个脚的管管”,呵呵,如果这样麻木不分的话&#x…

三次握手面试题java_java面试题三次握手和四次挥手-嗨客网

题目对 tcp 了解吗?讲讲它的三次握手和四次挥手?为什么需要三次握手,为什么需要四次挥手。答案三次握手第一次握手:客户端向服务器发送连接请求,这个时候报文首部中的同步为 SYN 1,同时生成一个随机序列号…

运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行脚本的问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://dgd2010.blog.51cto.com/1539422/1676490 运维经验分享作为一个专题,目前共7篇文章 《运维经验分享(一&#xff0…

一个jsp能取到父类jsp的值吗_「Javaweb」ssm整合权限控制框架shiro,你知道怎么做吗?...

为美好而努力——羊羽科技说。最近在开发自己的网站,需要权限控制功能,在网上找了一下,找到了我接下来要介绍的shiro框架。shiro框架是Apache公司维护的开源产品之一,其官网对其的简介是这样的:shiro官网简介翻译过来就…

php设置用户头像,PHP针对多用户实现更换头像功能

一个网站,其实说白了就是某几个特定功能的组合,而更换用户头像就在这些功能之中。今天就来做个测试,针对不同的用户,实现头像上传功能。先给大家展示下成品效果图:思路针对不同的用户上传头像,我们要为每一…

执行计划中cpu耗时_面试被问怎么排查遇到的系统CPU飙高和频繁GC,到底该怎么回答?...

处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排…

可视化数据包分析工具-CapAnalysis

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://chenguang.blog.51cto.com/350944/1325742 可视化数据包分析工具-CapAnalysis 我们知道,Xplico是一个从pcap文件中解析出IP流…

网易云歌单添加到php,给自己的网站添加网易云音乐歌单吧^ ^

这个是怎么实现的?一起来看看吧APlayer首先我们需要一个音频播放器,这里我用到了APlayer,这是由bilibili前端大神DIYgod开源的播放器,有兴趣的可以去TA的主页看看,非常惊艳,这里我就不多说了我们看一下APla…

百度应用部署秘籍

2019独角兽企业重金招聘Python工程师标准>>> 【背景介绍】 传统PaaS采用sandbox实现app间的资源安全隔离,sandbox需要对运行环境和编程语言进行底层的功能限制,例如:禁止创建进程和线程,禁止部分系统调用,禁…

java8新特性_JAVA8十大新特性详解

一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sq…

spark1.6.1 on yarn搭建部署

注:本文是建立在hadoop已经搭建完成的基础上进行的。 Apache Spark是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写。该框架对资源调度,任务的提交、执行和跟踪,节点间的通信以及数据并行处理的内在底层操作都进…

主线程是如何向子线程传递数据的?_c++ 利用thread创建线程

用进行多线程开发小时候,老师总是教育我们上课要专心,“一心不可二用”。可是CPU这个不听话的“熊孩子”偏偏却在一个芯片中加入了两个甚至多个运算核心,想要一“芯”二用。从硬件厂商的角度,通过增加CPU的运算核心,突…

php多维数组交集,求数组差/交集函数-php数组函数(二)

求数组差集函数函数只检查了多维数组中的一维。可以用 array_diff($array1[0], $array2[0]) 检查更深的维度。u:自定义函数比较,a(association):同时比较键和值。自定义函数callable $value_compare_func必须返回一个小于零,等于零…

正则过滤符号_多角度理解正则项

过拟合和欠拟合什么是过拟合和欠拟合过拟合:模型在训练集上效果好,在测试集上效果差欠拟合:在训练集上效果就不好产生过拟合的原因参数太多,模型复杂度太高数据量少,训练轮次过多样本中噪声较大,模型拟合了…