【Git】分支管理策略

news2024/9/21 3:19:00

文章目录

    • 分支策略
    • bug分支-master分支出现bug怎么办
    • 删除临时分⽀
    • 小结

分支策略

在实际开发中,我们应该按照⼏个基本原则进⾏分⽀管理:

1.master分⽀应该是⾮常稳定的,也就是仅⽤来发布新版本,平时不能在上⾯⼲活

2.⼲活都在dev分⽀上,也就是说,dev分⽀是不稳定的,到某个时候,⽐如1.0版本发布时,再把dev分⽀合并到master上,在master分⽀发布1.0版本

3.你和你的⼩伙伴们每个⼈都在dev分⽀上⼲活,每个⼈都有⾃⼰的分⽀,时不时地往dev分⽀上合并就可以了

团队合作的分⽀看起来就像这样

image-20230728102355855


bug分支-master分支出现bug怎么办

假设目前正在dev分支进行开发,开发到⼀半,突然发现master分支上有bug需要解决,在Git中,每个bug都可以通过⼀个新的临时分⽀来修复,修复后,合并分⽀,然后将临时分⽀删除。但是此时dev分支的代码在工作区开发了一半还无法提交,此时怎么办?

git stash命令:将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来

案例步骤:

1°:在dev分支上的代码在工作区开发了一半,发现master上有bug,此时使用git stash命令,将当前的⼯作区信息进⾏储藏,此时用git status查看工作区,发现就是干净的!除⾮有没有被Git管理的⽂件,因此可以放⼼地创建分⽀来修复bug

2°:储藏dev工作区之后,由于我们要基于master分⽀修复bug,所以切回到master分支上,再进行新建临时分支来修复bug

3°:修复完成后,切换到master分支上,并完成合并,最后删除临时分支。bug的修复⼯作已经做完了,我们还要继续切回到dev分支进行开发,首先查看工作现场,然后恢复现场,再次查看的时候,我们已经发现已经没有现场可以恢复了。

git stash list:查看工作现场,git stash pop:恢复现场,恢复现场的同时会把stash也删了

git stash apply也可以恢复现场,但是恢复现场后stash的内容并不删除,此时需要使用 git stash drop来删除stash

可以进行多次stash,恢复的时候:先使用git stash list查看工作现场,然后使用指令:git stash apply stash@{序号}:恢复指定的stash

image-20230728111427220

4°:恢复完代码之后我们便可以继续完成开发,开发完成后便可以进⾏提交。但是此时修复bug的内容,并没有在dev分支上显示,此时的状态图如下:

image-20230728104225290

5°:此时master 分⽀⽬前最新的提交要领先于【新建dev分支时候,基于的master分支的提交】,所以我们再dev当中看不到修复bug的代码,但是最终目的是要让master分支合并dev分支,正常情况下我们切回master分支直接合并,但是这样其实是有⼀定⻛险的

  • 因为在合并分⽀时可能会有冲突,⽽代码冲突需要我们⼿动解决,如果按照上述的方式,此时要在master分支上解决
  • 我们⽆法保证对于冲突问题可以正确地⼀次性解决掉,因为在实际的项⽬中,代码冲突不只⼀两⾏那么简单,
    有可能⼏⼗上百⾏,甚⾄更多,解决的过程中难免⼿误出错,导致错误的代码被合并到master当中

此时的状态为:

image-20230728104511728

建议使用的方法:在⾃⼰的分⽀上(dev分支)合并master,再让master去合并dev分支,这样做的目的是:如果有冲突可以在本地分⽀上解决并进⾏测试,而不会影响master分支。此时的状态为:

image-20230728104945538

上述图是禁用Fast forward模式得出的,主要是为了方便解释问题

image-20230728111519564


删除临时分⽀

软件开发中,总有⽆穷⽆尽的新的功能要不断添加进来。添加⼀个新功能时,肯定不希望因为⼀些实验性质的代码,把主分⽀搞乱了,所以,每添加⼀个新功能,最好新建⼀个分⽀,我们可以将其称之为feature分⽀,在上⾯开发,完成后进行合并,最后删除该feature分⽀。

但是,如果正在feature分支上开发了一半,被产品经理突然叫停,说是要停⽌新功能的开发。虽然⽩⼲了,但是这个分支还是必须就地销毁!这时使⽤传统的 git branch -d 命令进行删除是不行的

删除临时分支:git branch -D 分支名,之前的是合并分支之后再删除 || 没有进行过提交的分支,所以可以使用git branch -d 分支名进行删除该分支

案例演示:

1°:创建并切换到dev3分支,在dev3分支上开发新功能,并进行提交

2°:新功能叫停,不做了!

3°:切换到master分支上准备删除dev3分支,常规使用git branch -d 分支名删除是失败的!此时需要使用git branch -D 分支名进行删除

image-20230728112602088


小结

分⽀在实际中有什么⽤呢

1.假设你准备开发⼀个新功能,但是需要两周才能完成,第⼀周你写了50%的代码,如果⽴刻提交,由于代码还没写完,不完整的代码库会导致别⼈不能⼲活了。如果等代码全部写完再⼀次提交,⼜存在丢失每天进度的巨⼤⻛险。

2.有了分支之后:创建了⼀个属于你⾃⼰的分⽀,别⼈看不到,还继续在原来的分⽀上正常⼯作,⽽你在⾃⼰的分⽀上⼲活,想提交就提交,直到开发完毕后,再⼀次性合并到原来的分⽀上,这样,既安全,⼜不影响别⼈⼯作

3.并且Git⽆论创建、切换和删除分⽀,Git在1秒钟之内就能完成!⽆论你的版本库是1个⽂件还是1万个⽂件

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

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

相关文章

echarts图表基本使用

折线图 import * as echarts from echarts;const chartDom document.getElementById(main); const myChart echarts.init(chartDom); const option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [820, 932, …

【MySQL】下载安装以及SQL介绍

1,数据库相关概念 以前我们做系统,数据持久化的存储采用的是文件存储。存储到文件中可以达到系统关闭数据不会丢失的效果,当然文件存储也有它的弊端。 假设在文件中存储以下的数据: 姓名 年龄 性别 住址 张三 23 男 北京…

【MySQL】DDL和DML

4,DDL:操作数据库 我们先来学习DDL来操作数据库。而操作数据库主要就是对数据库的增删查操作。 4.1 查询 查询所有的数据库 SHOW DATABASES; 运行上面语句效果如下: 上述查询到的是的这些数据库是mysql安装好自带的数据库,我们以后不要操…

树莓派 PICO配置教程-hello world,基础教程,如何配置树莓派pico,raspberry pico(基于MicroPython)

1 树莓派 PICO 简介 1.1 简介 Raspberry Pi Pico是具有灵活数字接口的低成本,高性能微控制器板。它集成了Raspberry Pi自己的RP2040微控制器芯片,运行速度高达133 MHz的双核Arm Cortex M0 处理器,嵌入式264KB SRAM和2MB板载闪存以及26个多功…

uniapp小程序console.log在微信开发者工具中不打印问题

最近在开发一款uniapp小程序,发现console.log在微信开发者工具中不打印,但在H5页面就能够有打印输出,于是在网上寻找原因… 主要是由于vue.config.js文件中有设置发布时删除console的配置,如下: 官网参考地址&#x…

涛思数据与拾贝云达成战略合作,携手赋能工业数字化转型

2023 年 7 月 27 日,北京涛思数据科技有限公司(以下简称“涛思数据”)与广州拾贝云科技有限公司(以下简称“拾贝云”)于广州签署战略合作协议。双方围绕电力行业的需求与痛点展开积极讨论,就如何量身打造最…

3分钟白话RocketMQ系列—— 核心概念

白话3分钟,快速了解RocketMQ基础,包括适用场景,以及基本概念。 看完如果不了解,欢迎来打我。 关键字摘要 低延迟、高可用、高可靠、高并发 的消息中间件适合在线业务分为producer、consumer、nameserver、broker等角色另外还有主…

第一次创建OBBH、OB28如何关联到程序ZGGBS000、ZGGBR000

如果做替代OBBH、校验OB28网上有很多的资料,我就不多说了。 但是对于某项目、服务器第一做OBBH、OB28时,我们将程序RGGBS000、RGGBR000复制成ZGGBS000、ZGGBR000后,如何将OBBH、OB28与我们的程序ZGGBS000、ZGGBR000关联呢? 用SM…

如何以无服务器方式运行 Go 应用程序

Go编程语言一直以来都对构建REST API提供了丰富的支持。这包括一个出色的标准库(net/HTTP),以及许多流行的包,如Gorilla mux、Gin、Negroni、Echo、Fiber等。使用AWS Lambda Go运行时,我们可以使用Go构建AWS Lambda函数…

盖雅工场典范案例之纤维隐形冠军兰精的人效提升密码

一面是严苛的环保工艺要求企业不能只关注降本,一面是“为人所有 与人共享”的企业文化将“人”摆在极其重要的位置。 如何找到一条合适的人效提升路径,既能持续高速发展,又让员工干得满意、自豪? 注:本文整理自盖雅工…

STM SPI学习

SPI介绍 SPI:串行外设设备接口(Serial Peripheral Interface),是一种高速的,全双工,同步通信总线。 IIC总线与SPI总线对比 全双工:同一时刻既能接收数据,也能发送数据。 CS&…

windows上给oracle打补丁注意事项

打补丁的过程 1、升级opatch工具,检查剩余空间用于存放ORACLE_HOME的备份,设置oracle_home环境变量,通过readme中的先决条件来检查现有补丁是否和本次补丁冲突 2、opatch apply 升级数据库软件,这个必须数据库文件不要被进程调用 在windows上…

VS中使用QT的插件:QT VS Tools

1、插件下载 (1)可以在VS中的管理扩展中直接搜索安装,但是我下载太慢,甚至是根本就无法安装。 (2)qt插件下载地址:Index of /official_releases/vsaddin 这个地址下载就很快,下载…

关于BQ27427的配置问题

EVM是TI家做的BQ27427的开发板,这款芯片还挺新的。 大概是这样,一块开发板要一千多块钱,使用的时候还出现了一些奇怪的问题。 配置使用的是买的盗版的EV2400,就是黑色的那个东西,使用的通信方式IIC。 TI手册上写的软件…

实战:Prometheus+Grafana监控Linux服务器及Springboot项目

文章目录 前言知识积累什么是Prometheus什么是Grafana怎样完成数据采集和监控 环境搭建docker与docker-compose安装docker-compose编写 监控配置grafana配置prometheus数据源grafana配置dashboardLinux Host Metrics监控Spring Boot 监控 写在最后 前言 相信大家都知道一个项目…

@ConfigurationProperties

目录 ConfigurationProperties 自定义bean使用注入 第三方bean注入 EnableConfigurationProperties ConfigurationProperties 当想需要获取到配置文件数据时,除了可以用 Spring 自带的 Value 注解外,SpringBoot 还提供了一种更加方便的方式&#xff1…

零基础C#编写上位机如何入门?

学习C#基础语法和.NET框架,掌握基本编程概念和语法,例如数据类型、类、对象、继承、多态、异常处理等。学习WinForm窗体应用程序开发技术,掌握窗体应用程序的设计和开发,例如控件的使用、事件驱动编程、窗体的布局与设计等。学习数…

结构重参数化详解。(bn+conv)与(conv+bn)的融合

结构重参数化详解。(bnconv)与(convbn)的融合 原理哪种情况不能合并?带bn的合并结构(conv bn)(bn conv)需要注意:pytorch代码 原理 如何理解结构重参数化&…

低代码是什么意思?

低代码是什么意思? 简单而言,低代码(Low-code)是一种软件开发和应用开发方法论,旨在帮助开发人员快速构建应用软件,同时减少繁琐的手动编码工作。该方法论注重简化开发流程,通过可视化建模和少…

【eNSP】Telnet远程登录

Telnet远程登录 eNSP软件TelnetTelnet远程登录-路由连接关闭防火墙eNSP根据图1画图路线配置路由端口IP配置路由R1改名配置接口IP 配置路由R2 配置R2的远程登录设置登录用户授权级别退出登录超时时间 Telnet测试 eNSP软件 eNSP(Enterprise Network Simulation Platform)是一款由…