Git 分支详解

目录

1. Git 分支管理

2. 如何自己创建分支?   

3. 创建分支修改内容,之后合并到主分支

4. 删除分支

5. 出现 merge 冲突如何解决

6. 分支策略

前言

    之前只是知道有 master 分支这个东西,但是具体是啥意思还是不知道,今天详细总结一下。

如下图所示:这个时间线就是 master 主分支,HEAD就是指针,是指向 master 的,所以就通过HEAD 找到 master,通过 master 找到最后一次的提交,此时这条时间线就可以理解为是一个分支。

    除了主分支之外,它也是可以创建一些其他的分支的,

       下图所示:git 也是支持创建分支和合并分支的。

 1. Git 分支管理

    在创建第一个分支之前,是需要看下当前 Git 中有哪些分支;使用 git branch 命令;如下图所示:

    只有一个 master 分支,当Git创建出来仓库之后,默认的就是这个 master 分支, 此时可以回想上文中介绍的 HEAD,HEAD 指针不只是可以指向 master 分支的,还可以指向任何的分支,被 HEAD指向的分支才是当前我们工作的分支, 所以 HEAD 的作用:HEAD 指向那个分支,哪个分支就是工作分支。

2. 如何自己创建分支?
   

     使用 命令:git branch [分支名称]

    创建好之后还是用 git branch 命令来查看当前有哪些分支,如下图所示:

    也可使用 tree .git/ 来查看当前 Git 中的树状结构:

    然后查看 master 和 dev 分支下都有什么,可以看到当前 master 和 dev 都是指向最新的一次的提交的,下图所示:

    下图就是树状结构图的直观体现,dev 分支也是指向 最新的一次提交的原因:在创建 dev 分支的时候就是站在当前版本的最新的提交基础上创建的分支。

  3. 创建分支修改内容,之后合并到主分支

    如果此时我们想在 新创建的 dev分支来进行 add 和 commit 操作,需要先将工作分支切换到 dev 分支才可以,可以使用 git checkout dev,(之前的 checkout -- ... 的意思是撤销工作区中修改的内容)

    修改 dev 分支作为工作分支之后,此时就可以在 dev 分支修改文件了,随便做一个修改之后,如下图所示:

     在 dev 这个工作分支修改内容之后,进行一次 commit 提交,之后切换分支到 master 为工作分支,可以看到,两次的最新提交记录并不是一样的,如下图所示:

    其实在工作分支进行提交之后,是并不会影响其他分支的,dev 分支提交的是最新的一次改动,但是 master 分支还在指向上一次的改动,我们可以使用 git merge dev 来将 dev 分支改动的内容提交到 master 主线上来,前提是将工作分支切换到 master 分支上,合并之后的内容就是一样的了;如下图所示:

    其实上述所描述的就是 创建一个 dev 分支,在 dev 分支上修改了 ReadMe 文件,修改之后再将dev 分支修改的内容合并到 master 主线上。(master分支就是一个创建git仓库之后默认就有的主线),一旦合并之后,dev 的使命也就结束了,对于 dev 分支来说,不用了就需要将删掉,为了不占用资源。

  4. 删除分支

    注:首先要删除一个分支,需要在其他分支上来进行删除,如:要删除 dev 分支不能只在 dev 分支上删除 dev 分支,可以在 master 分支上删除 dev 分支。

     如下图所示:如果当前分支是工作分支,是不能对这个 工作分支进行删除的。

    只能在当前工作分支,来删除其他的工作分支,(但是删除 dev 分支之后并不会影响 master 分支指向的最新的一次提交)如下图所示:

    master 分支还是指向的 dev 最新一次修改的提交:

     Git 是鼓励创建分支来修改 master 主线上的内容的,因为这个过程很轻量,直接更换的就是HEAD指针,虽然也可以在 master 主线上对文件的内容进行修改,但是 创建 dev 分支修改然后进行合并的这种方式,过程是更安全的。

  5. 出现 merge 冲突如何解决

    首先介绍一下什么是 merge 冲突,如:现在提出了一个新需求来进行开发一个新功能,所以此时就需要创建一个新的 dev 分支,现在正在 dev 分支进行开发呢,但是 master 分支上突然出现了一个 bug(master 分支上的代码也不是完全稳定的,只是相对来说稳定),所以就要修改 master 分支上的代码,不一会,dev 的代码写好了,然后 master 分支的 bug 也改好了,此时要进行合并了,但是dev分支一个版本,master 分支一个版本,此时应该merge保留的是哪个版本的代码呢,此时出现的情况就叫代码 merge 冲突,Git 是不会替开发人员做决定来保留哪个版本的代码的,所以需要开发人员来自己解决,解决的方法手动修改代码,然后进行 add 和 commit 操作即可。

    来模拟一下这个流程,创建一个 dev 分支,并切换到 dev 分支,还是修改 ReadMe 文件,如下图所示:

     解决 merge 冲突之前就是如下图所示的这个状态:

     上图所示的过程就是手动解决 merge 冲突的方法。

     还有一个命令 就是 git stash,这个意思就是将当前工作分支没有 commit 的文件进行保存,保存当前的工作进度,应用场景就是:在进行代码开发时,希望临时保存当前的工作进度,包括已暂存和未暂存的修改,然后去处理其他分支的任务,但是需要注意的是,前提是这个文件已经交给 Git 托管了,此时才能进行 stash,如下图所示:

     但是如果新建一个文件,这个文件还没有进行过 add 和 commit 操作,此时这个文件就是没有被 Git 管理的,就不能进行保存,ReadMe 文件可以 stash 就是因为这个文件已经托管到 Git中了如下图所示:

  6. 分支策略

     上图所示:右边 master 主分支跑的代码是稳定的代码,所以 master 分支跑的代码是非常稳定的,次啊可以保证线上环境是稳定的,除了 master 分支,还有日常进行开发的主分支的 dev 分支,dev 分支上的代码是不稳定的,这个环境是没有经过验证测试的分支。

     但是 master 分支也不是绝对稳定的代码,当 master 分支出现了 bug ,开发人员是不可以进行bug 的 fix 的,应该先创建一个本地分支,之后再进行 bug 的 fix,修复完成之后要进行一系列的测试,之后才可以 merge 到 master 主分支,如果直接在 master 主分支上进行修改,可能在改代码的过程中就出现更大的 bug,可能线上的环境就会更加不稳定。

      如现在有这样的一个场景,正在 dev2 分支上进行开发,之后突然在 master 分支上出现了一个bug,此时开发人员该如何解决呢?

      首先 git stash dev2 分支的代码(保存当前的工作进度),之后切换到 master 分支上创建 fix bug 的分支,当然也可以在 dev2 分支上进行 fix,但 dev2 的初衷是开发新需求,而不是修改bug,所以最好创建一个新的分支:

     上图所示:现在的状态是已经 fix bug 了,也已经 merge 到 master 分支上了,但是此时还需要回到 dev2 进行新需求的开发,下图所示:

     但是此时 dev2 分支的代码不见了,就是因为刚才fix bug 之前使用了 git stash,所以切换回来 dev2 分支后,还需要将 stash 区保存的内容拿出来,使用 git stash pop命令,在操作之前可以使用 git stash list 命令来查看 stash 区中保存的是哪一次的内容:

     此时就可以看到我们的开发到一半的代码了,但是此时可以看到 dev2 分支的状态还是没有修复bug 的版本,原因就是 dev2 的创建就是在 master 分支提交bug之后这个版本的基础上创建出来的,但是此时 dev2 分支也不会影响 master 分支,因为 master 主分支已经 fix bug了。

     当在 dev2 分支上开发完新的需求之后,此时就可以将 dev2 分支的功能合并到 master 主分支上了,但是 master 分支在 fix bug 时候也已经改了内容了,所以此时进行合并一定是会 merge 冲突的,有了冲突就要解决冲突,解决冲突就需要手动改动代码,手动改就有可能出现 bug,所以是不建议在 master 分支中进行merge 冲突的解决的,此时一个比较好的做法就是将 master 分支中的代码 merge 到 dev2 分支上来,此时即使改出来新的 bug,也不会影响 master 主分支中的内容,所以可以按照下图所示进行操作:

   

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

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

相关文章

卫星影像数据查询网址(WORLDVIEW1/2/3/4、PLEIADES、SPOT系列、高景、高分1-7、资源系列、吉林一号等)

商业卫星影像数据查询网址(WORLDVIEW1/2/3/4、PLEIADES、SPOT系列、高景、高分1-7、资源系列、吉林一号等) 1、资源卫星应用中心 网址:http://www.cresda.com/CN/ 可查询国产高分1、2、3、4、5、6、7号卫星,资源三号、资源三号…

用HeidiSQL在MySQL中新建用户

用HeidiSQL登录到MySQL数据库,注意登录的时候要使用有权限的用户: 选择工具-》用户管理: 点击左上角的“添加”: 输入用户名、密码,并且分配权限: 点击右边的“添加对象”: 可以根据自己…

系统托盘区句柄研究和C#基本托盘编程

因为我的系统托盘区小图标有时候会不可见,在还是在; 研究一下系统托盘区的句柄,是否每个小图标是一个单个窗口,就像form的button一样; 下图句柄工具,把问号拖动到窗口上,就会显示该窗口的句柄和窗口类等信息; 拖到系统托盘区看一下;拖到任何一个小图标上面,都只显示…

使用VC++设计程序实现K近邻中值滤波器(KNNMF)、最小均方差滤波器、矢量中值滤波算法进行滤波

VC实现若干种图像滤波技术2 获取源工程可访问gitee可在此工程的基础上进行学习。 该工程的其他文章: 01- 一元熵值、二维熵值 02- 图像平移变换,图像缩放、图像裁剪、图像对角线镜像以及图像的旋转 03-邻域平均平滑算法、中值滤波算法、K近邻均值滤波器 …

【Flink】容错机制

目录 1、检查点 ​编辑1.1 检查点的保存 1.1.1 周期性的触发保存 1.1.2 保存的时间点 1.1.3 时间点的保存与恢复 1.1.3.1保存 ​编辑 1.1.3.2 恢复的具体步骤: 1.2 检查点算法 1.2.1 检查点分界线(Barrier) 1.2.2 分布式快照算法(Barrier对齐的精准一次) 1.2.…

HTML简介

1,网页 网页的相关概念 1.1,什么是网页? 网页是构成网站的基本元素,它通常由图片,链接,文字,声音,视频等元素组成。其实就是一个常见以.htm或.html后缀结尾的文件,因此…

页面表格高度自适应

前言 现在后端管理系统主页面基本都是由三部分组成 查询条件,高度不固定,可能有的页面查询条件多,有的少表格,高度不固定,占据页面剩余高度分页,高度固定 这三部分加起来肯定是占满全屏的,那么我…

零基础上手,秒识别检测,IDEA研究院发布全新T-Rex模型

目标检测作为当前计算机视觉落地的热点技术之一,已被广泛应用于自动驾驶、智慧园区、工业检测和卫星遥感等场景。开发者在研究相关目标检测技术时,通常需熟练掌握图像目标检测框架,如通用目标检测框架 YOLO 系列,旋转目标检测框架…

『Nginx安全访问控制』利用Nginx实现账号密码认证登录的最佳实践

📣读完这篇文章里你能收获到 如何创建用户账号和密码文件,并生成加密密码配置Nginx的认证模块,实现基于账号密码的登录验证 文章目录 一、创建账号密码文件1. 安装htpasswd工具1.1 CentOS1.2 Ubuntu 二、配置Nginx三、重启Nginx 在Web应用程…

SpringAMQP入门案例——发送消息

依赖 <!--SpringAMQP起步依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> yml配置文件 自行修改 spring:rabbitmq:host: 192.168.220.130 # …

CyclicBarrier实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

【源码篇】基于SpringBoot+thymeleaf实现的大学生自习室座位预定系统

文章目录 系统介绍管理员学生 技术选型成果展示账号地址及其他说明 系统介绍 基于SpringBootthymeleaf实现的大学生自习室座位预定系统是为座位管理打造的一款在线管理平台&#xff0c;它可以实时完成信息处理&#xff0c;使其系统化和规范化。 系统功能说明 管理员 1、用户…

误用STM32串口发送标志位 “USART_FLAG_TXE” “USART_FLAG_TC”造成的BUG

当你使用串口发送数据时是否出现过这样的情况&#xff1a; 1.发送时第一个字节丢失。 2.发送时出现莫名的字节丢失。 3.各种情况字节丢失。 1.先了解一下串口发送的流程图&#xff08;手动描绘&#xff09;&#xff1a; 可以假想USART_FLAG_TXE是用于检测"弹仓"&…

【STM32F103】GPIO通用输入输出口

GPIO 简介 GPIO&#xff08;General Purpose Input Output&#xff09;通用输入输出口是微控制器&#xff08;MCU&#xff09;必备的片上外设&#xff0c;可以实现微控制器与外部设备的数字交换。 STM32F103系列的芯片最多可以提供112个多功能双向IO引脚&#xff0c;但是显然…

机器学习-回归问题(Regression)

前言 与KNN分类任务预测的输出为离散型不同. 在机器学习中&#xff0c;回归任务是用于预测连续数值型变量的任务。回归任务在很多领域都有着广泛的应用. 回归问题求解 在一个回归问题中&#xff0c;很显然模型选择和好坏会直接关系到将来预测结果的接近程度&#xff0c;举个…

规则引擎专题---2、开源规则引擎对比

开源规则引擎 开源的规则引擎整体分为下面几类&#xff1a; 通过界面配置的成熟规则引擎&#xff0c;这种规则引擎相对来说就比较重&#xff0c;但功能全&#xff0c;比较出名的有:drools, urule。 基于jvm脚本语言&#xff0c;互联网公司会觉得drools太重了&#xff0c;然后…

常见的AI安全风险(数据投毒、后门攻击、对抗样本攻击、模型窃取攻击等)

文章目录 数据投毒&#xff08;Data Poisoning&#xff09;后门攻击&#xff08;Backdoor Attacks&#xff09;对抗样本攻击&#xff08;Adversarial Examples&#xff09;模型窃取攻击&#xff08;Model Extraction Attacks&#xff09;参考资料 数据投毒&#xff08;Data Poi…

GEE:不同方向的线性检测算子

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine(GEE)平台上,使用不同方向的线性检测算子进行卷积操作的代码框架、核心函数和多种卷积核,比如 E-W、NE-SW、N-S、NW-SE 方向检测算子等。 结果如下图所示, 文章目录 一、定向检测算子二、完整代码三、代码链接一…

JAVA代码优化:CommandLineRunner(项目启动之前,预先加载数据)

CommandLineRunner接口是Spring Boot框架中的一个接口&#xff0c;用于在应用程序启动后执行一些特定的代码逻辑。它是一个函数式接口&#xff0c;只包含一个run方法&#xff0c;该方法在应用程序启动后被自动调用。可以帮助我们在应用程序启动后自动执行一些代码逻辑&#xff…

Java(十)(网络编程,UDP,TCP)

目录 网络编程 两种软件架构 网络通信的三要素 IP IPv4的地址分类 特殊IP 端口号 协议 用UDP协议发送数据 用UDP接收数据 TCP接收和发送数据 TCP通信--支持与多个客户端同时通信 网络编程 可以让设备中的程序与网络上其他设备的程序进行数据交互(实现网络通信) 两…