【Git】分支管理策略

文章目录

    • 分支策略
    • 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万个⽂件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Reinforcement Learning with Code 【Code 2. Tabular Sarsa】

Reinforcement Learning with Code 【Code 2. Tabular Sarsa】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiyu’s Mathematical Foundation of Rei…

Elasticsearch 全文检索 分词检索-Elasticsearch文章四

文章目录 官方文档地址refercence文档全文搜索体系match简单查询match 多词/分词单字段分词match多个词的逻辑控制match的匹配精度match_pharse_prefix分词前缀方式match_bool_prefixmulti_match多字段匹配 query string类型Interval类型DSL查询之Term详解聚合查询之Bucket聚合…

RTT(RT-Thread)线程管理(1.2W字详细讲解)

目录 RTT线程管理 线程管理特点 线程工作机制 线程控制块 线程属性 线程状态之间切换 线程相关操作 创建和删除线程 创建线程 删除线程 动态创建线程实例 启动线程 初始化和脱离线程 初始化线程 脱离线程 静态创建线程实例 线程辅助函数 获得当前线程 让出处…

【LeetCode】446. 等差数列划分II -- 子序列

题目链接 文章目录 1. 思路讲解1.1 dp表的创建1.2 状态转移方程1.3 使用哈希表找到k1.4 初始化1.5 返回值1.6 该题坑爹的一点 2. 代码编写 1. 思路讲解 我们要知道以某个位置为结尾的子序列的数量,可以通过它的以上一位置的为结尾的子序列的数量得知,也…

css3 hover border 流动效果

/* Hover 边线流动 */.hoverDrawLine {border: 0 !important;position: relative;border-radius: 5px;--border-color: #60daaa; } .hoverDrawLine::before, .hoverDrawLine::after {box-sizing: border-box;content: ;position: absolute;border: 2px solid transparent;borde…

Linux第八章之进程概念

一、冯诺依曼体系结构 关于冯诺依曼,必须强调几点: 这里的存储器指的是内存不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也只能写入内存或…

加强Web应用程序安全:防止SQL注入

数据库在Web应用程序中存储和组织数据时起着至关重要的作用,它是存储用户信息、内容和其他应用程序数据的中央存储库。而数据库实现了高效的数据检索、操作和管理,使Web应用程序能够向用户提供动态和个性化的内容。然而,数据库和网络应用程序…

SQL Developer中的Active Data Guard

这篇文章 Display Data Guard configuration in SQL Developer 中,用SQL Developer展示了多种ADG的拓扑。 今天自己也试了一下,还蛮简单的,其实最麻烦的部分在于搭建一个ADG环境。 假设我已有一个ADG环境,即最典型的环境&#x…

简要介绍 | 生成模型的演进:从自编码器(AE)到变分自编码器(VAE)和生成对抗网络(GAN),再到扩散模型

注1:本文系“简要介绍”系列之一,仅从概念上对生成模型(包括AE, VAE, GAN,以及扩散模型)进行非常简要的介绍,不适合用于深入和详细的了解。 生成模型的演进:从自编码器(AE)到变分自编码器(VAE)和生成对抗网络(GAN),再到扩散模型 一、背景介绍 生成模型在机器学习领域…

数据结构 | 线性数据结构——双端队列

目录 一、何谓双端队列 二、双端队列抽象数据类型 三、用Python实现双端队列 四、回文检测器 一、何谓双端队列 双端队列是与队列类似的有序集合。它有一前、一后两端,元素在其中保持自己的位置。与队列不同的是,双端队列对在哪一端添加和移除元素没…

Flask-SocketIO

一、简介: Flask-SocketIO使Flask应用程序可以实现客户端和服务器之间的低延迟双向通信。客户端应用程序可以使用 Javascript、Python、C、Java和Swift中的任何SocketIO客户端库或任何其他兼容客户端来建立与服务器的永久连接。 二、安装: pip instal…

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(18)-Fiddler如何接口测试,妈妈再也不担心我不会接口测试了

1.简介 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,fiddler做接口测试也是非常方便的。 领导或者开发给你安排接口测试的工作任务,但是没有给你接口文档(由于开发周期没有时间出接口文档)&…

【13】STM32·HAL库-正点原子SYSTEM文件夹 | SysTick工作原理、寄存器介绍 | printf函数使用、重定向

目录 1.sys文件夹介绍(掌握)2.deley文件夹介绍(掌握)2.1deley文件夹函数简介2.2SysTick工作原理2.3SysTick寄存器介绍2.4delay_init()函数(F1)2.5delay_us()函数(F1)2.6delay_ms()函…

这次,常温超导能否变为现实?

关注科研和技术的朋友近几天应当都听到韩国研发常温超导材料的消息了,作为攻城狮的我自然也是非常感兴趣,经过一番思想斗争还是放下了手上的单片机,想要一看这个常温超导的究竟,毕竟印象之中之前已经搞过好几次乌龙了。常温超导要…

el-table点击表格某一行添加到URL参数,访问带参URL加载表格内容并滚动到选中行位置 [Vue3] [Element-plus 2.3]

写在最前 需求:有个表格列出了一些行数据,每个行数据点击后会加载出对应的详细数据,想要在点击了某一行后,能够将该点击反应到URL中,这样我复制这个URL发给其他人,他们打开时也能看到同样的行数据。 url会根…

ABB机器人RAPID编程常用指令介绍1

ABB机器人RAPID编程常用指令介绍1 1. 运动控制指令 AccSet 语法格式:AccSet Acc,Ramp; Acc:机器人加速度百分比(num),默认值为100,最小为20 Ramp:机器人加速度斜坡比例(num),默认值为100,最小为10 应用:当机器人运行速度改变时,对所产生的相应加速度进行限制,使…

[Docker]入门之docker-compose

一,Docker-compose简介 1,Docker-compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project)&#xff0c…

C# 根据图片的EXIF自动调整图片方向

PropertyItems 代码 /// <summary>/// 根据图片exif调整方向/// </summary>/// <param name"img"></param>public void RotateImage(Bitmap img){var exif img.PropertyItems;byte orien 0;var item exif.Where(m > m.Id 274).ToArra…

Xilinx FPGA电源设计与注意事项

1 引言 随着半导体和芯片技术的飞速发展&#xff0c;现在的FPGA集成了越来越多的可配置逻辑资源、各种各样的外部总线接口以及丰富的内部RAM资源&#xff0c;使其在国防、医疗、消费电子等领域得到了越来越广泛的应用。当采用FPGA进行设计电路时&#xff0c;大多数FPGA对上电的…

html富文本编辑器

接了个单子&#xff0c;需要添加一个文章模块&#xff0c;一看用到的技术这么老&#xff0c;人傻了&#xff0c;纯html css js 。 在普通页面中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"…