Git原理与使用(二):分支管理

news2024/11/24 5:22:08

Git原理与使用[二]:分支管理

  • 一.分支的基本操作
    • 1.理解分支
    • 2.创建分支
    • 3.切换分支
    • 4.删除分支
    • 5.补充:创建并切换分支
  • 二.合并分支
    • 1.合并分支的基础操作
    • 2.分支冲突
  • 三.分支管理策略
    • 1.Fast-forward模式
    • 2.--no--ff(即:禁用Fast-forward模式)
    • 3.分支策略
  • 四.创建临时分支修复bug
    • 1.git stash存储工作区内容
    • 2.修复bug
    • 3.删除临时分支
    • 3.恢复工作区内容
    • 4.合并冲突
  • 五.分支管理的小结

分支管理是Git的杀手锏之一
威力无比强大
下面就让我们一起开始分支管理的探索之旅吧

一.分支的基本操作

1.理解分支

在这里插入图片描述
注意:

HEAD指向的是当前分支!!!

在这里插入图片描述
这就是master分支移动的大致草图

2.创建分支

既然分支这么强大,
那么我们如何创建分支呢?

git branch 查看当前本地的所有分支
git branch 分支名   创建分支

在这里插入图片描述
默认情况下,我们只有master这一个分支
然后我们又创建了一个分支:dev
此时我们就有两个分支了

但是这个master分支前面为什么有一个*呢?
因为我们当前所在的分支是master分支
也就是HEAD目前正在指向的分支

那么怎么切换分支呢?

3.切换分支

git checkout 分支名

熟悉不熟悉,git checkout – 文件名
撤销操作,回退工作区中的文件内容
此时它没有加--,就变成了切换分支的命令
在这里插入图片描述
创建分支就像是这样:
在这里插入图片描述
其实切换分支就是把HEAD指针改一下指向即可
因此切换分支就像是这样:
在这里插入图片描述
下面我们在dev分支上面修改test.txt这个文件(分身学习java)
然后看看会不会对master分支造成任何影响?
(在互相独立的平行空间当中,分身去学习java会不会让正在专心致志学习C++的我们感到疲惫?)
在这里插入图片描述
在dev分支上面修改了test.txt并进行了add和commit之后
我们回到master分支下看看test.txt有没有更新
在这里插入图片描述
然后我们发现对master分支并没有影响
(分身学java不会让我们感到疲惫,正和我们的需求)
在这里插入图片描述
在这里插入图片描述
dev分支上依然存在,分身会有java的知识
那么它是怎么做到的呢?
在这里插入图片描述
也就是这样:
在这里插入图片描述
在这里插入图片描述

4.删除分支

首先要说明的是:
1.如果我们当前正处于某分支下,就不能删除该分支 只有当我们处于其他分支下的时候才可以删除该分支
2.因为master分支相当重要,所以谨慎期间我们一定不能删除master分支

git branch -d dev  删除dev分支

在这里插入图片描述
此时我处在dev分支下,因此无法删除dev分支
下面我切换到master分支再去删除dev分支
在这里插入图片描述
它提示我们:
当前分支还没有进行合并,无法删除
(关于分支合并的问题,我们接下来就会介绍)
如果你确定就是要删除这个分支
使用:

git branch -D dev

在这里插入图片描述
然后我们强制删除,此时删除成功

5.补充:创建并切换分支

先创建分支,然后再去切换到该分支
操作略显冗余
那么可不可以创建并切换分支呢?
当然可以:

git checkout -b dev

在这里插入图片描述

二.合并分支

1.合并分支的基础操作

一般情况下
因为master分支相当重要,所以我们建议在dev分支上进行工作
最后只需要将dev分支上的内容合并到master分支当中即可

下面我们就在dev分支下修改一下test3.txt
并且add commit
在这里插入图片描述

git merge 分支名

将某个分支中的内容合并到当前分支下
因此,我们需要先切换到master分支下,然后在master分支上面合并dev分支
在这里插入图片描述
合并成功,test3.txt的新版本也进入了master分支中的暂存区和版本库了

其中这个Fast-forward代表"快进模式"
也就是直接把master指向dev的当前提交,所以合并速度非常快
当然,不是每次合并都能够Fast-forward,我们后面会介绍其他方式的合并
在这里插入图片描述
这就是合并的过程:
在这里插入图片描述
在这里插入图片描述

2.分支冲突

但是在实际的分支合并的时候不是我们想合并就能合并成功的,有时候可能会遇到代码冲突的问题.
下面我们在dev分支下把test.txt的第二行给它修改一下
在这里插入图片描述在这里插入图片描述
然后在dev分支下 add commit
在这里插入图片描述
然后我们切换到master分支下
一开始时master分支下的test.txt肯定是没有dev分支下添加的那一行的(这点我们现在也完全能够理解)
因此master分支下的那个人就继续往下写代码了
在这里插入图片描述
写完之后add commit

此时,master和dev分支都有了各自的新的提交,也就是变成了这样:
在这里插入图片描述
此时合并的话就可能会有冲突

然后我们切换到dev分支下合并master分支
因为master分支是主分支,相当重要,而dev分支则没有那么重要
因此我们不会让master分支出现任何"危险",要时刻保护master分支的安全

在这里插入图片描述
下面我们vim test.txt
看一下变成了什么样子
在这里插入图片描述
此时我们必须要手动调整冲突代码,并需要再次提交修正后的结果
在这里插入图片描述
最后我们修改成了这个样子,这个样子其实就是master分支修改后的内容
此时冲突就被解决了
然后我们还要add commit一下
在这里插入图片描述
然后git merge master就成功了
在这里插入图片描述
此时冲突解决完成
状态就变成了
在这里插入图片描述

三.分支管理策略

1.Fast-forward模式

通常合并分支时,如果可能的话,Git会采用Fast-forward模式
而在Fast-forward模式下我们是看不出该次提交时merge进来的还是正常提交的

在这里我们介绍一个命令

git log --graph --pretty=oneline --abbrev-commit

在这里插入图片描述
这个命令可以从分支历史上看出分支信息
也就是能够看出到底是merge进来的还是正常提交的

在合并冲突时进行合并的模式就不是Fast-forward了
因为Fast-forward模式是直接改变分支的指向的
而我们解决合并冲突时又进行了一次新的提交
最后在dev分支下进行merge合并时才让master分支指向那次新的提交

2.–no–ff(即:禁用Fast-forward模式)

Git支持我们强制禁用Fast-forward模式,
那么就会在merge时生成一个新的commit,这样我们就能从分支历史上看出分支信息了

git merge --no-ff -m "提交信息" 要合并的分支名称

下面我们来演示一下
我们切换到dev分支下往test.txt文件中再去新增一行内容
然后 add commit
然后切换到master分支下去合并dev分支
在这里插入图片描述
在这里插入图片描述
大家只需要知道:
1.禁用Fast-forward模式后合并时会创建一个新的commit id
所以要加上-m参数

2.在合并分支时加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
但是Fast-forward就看不出曾经做过合并

3.分支策略

在这里插入图片描述

四.创建临时分支修复bug

在Git中,每一个bug都可以通过创建一个新的临时分支来修复.
修复后,合并分支,再把临时分支删除

1.git stash存储工作区内容

假如我们现在正在dev分支上进行开发,
开发到一半了,突然发现master分支上面有bug,需要解决
可是我现在dev分支上的代码在工作区写了一半了,还无法提交,怎么办呢?

例如:
我现在在test1.txt上面写了一些代码
在这里插入图片描述
Git提供了一个命令,可以将当前工作区的信息进行储藏,被储藏的内容可以在将来的某一个时间点恢复出来

git stash

在这里插入图片描述
目前我们的工作区就变成干净的了(除非我们工作区目前的文件还有没被Git管理的文件),因此我们就可以放心的创建分支来修复bug了

2.修复bug

因为bug出现在master分支上
所以我们要基于master分支创建临时分支来修复bug
在这里插入图片描述
然后在这个临时分支fix_bug上修复bug
假设test1.txt的第一行就是bug,这一行要改成写hello这五个字符
在这里插入图片描述
然后add commit 之后就修复完成了
然后切换到master分支完成合并
在这里插入图片描述

3.删除临时分支

合并完成之后,master分支上的bug就被修复成功了
然后我们就可以删除fix_bug分支了
在这里插入图片描述

3.恢复工作区内容

至此,bug的修复工作做完了,我们还要继续回到dev分支进行开发

git stash list
查看存储的内容

在这里插入图片描述

git stash pop
恢复工作区的内容,恢复的同时也会把stash的内容删除掉

也可以使用这个命令
git stash apply
恢复工作区的内容,恢复的同时并不会把stash的内容删除掉
需要使用git stash drop来删除

我们也可以使用git stash apply stash@{0}来恢复指定的stash内容

我们在这里就使用git stash pop这个命令了
在这里插入图片描述
但是此时我们修复bug后的内容并没有在dev分支上面显示
因此我们就要
1.在dev中合并master分支
2.在master分支下合并dev分支

这样做的好处是:
第一步就算合并时出现了问题也可以在本地的dev分支下多次修改测试,不会影响master分支的代码

第二步时由于冲突在dev分支中就被解决了,那么此次合并基本就不会出现冲突问题了

4.合并冲突

我们开始第一步:
因为我们工作区的代码还没有add 和commit
所以要先add commit
然后merge
在这里插入图片描述
然后我们开始解决冲突
在这里插入图片描述
然后add commit
在这里插入图片描述
第一步完成
开始第二步:
切换到mater合并dev分支
在这里插入图片描述
在这里插入图片描述
至此bug问题成功解决

五.分支管理的小结

在这里插入图片描述

以上就是Git原理与使用(二):分支管理的全部内容,希望对大家有所帮助!

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

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

相关文章

C#核心学习(面向对象)

目录 封装构造函数基本概念:写法:特殊写法注意: 析构函数基本语法 垃圾回收机制(GC,Garbage Collector)回收算法C# 中内存回收原理自动回收步骤注意 手动回收: 成员属性基本概念基本语法注意&am…

什么是软件测试?这是我听过最通俗易懂的解释

很多人总是说我要学习软件测试,因为他可以拿到一个不错的薪资。 但是当我问他你知道什么是软件测试吗?这个时候,他总会愣住了,一脸不屑的表情说着,不就是找bug,给软件找问题,找茬吗&#xff1f…

超好用的IDEA插件!免费

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件:Api…

Windows电脑引导损坏?按照这个教程能修复

前言 Windows系统的引导一般情况下是不会坏的,小伙伴们可以不用担心。发布这个帖子是因为要给接下来的文章做点铺垫。 关注小白很久的小伙伴应该都知道,小白的文章都讲得比较细。而且文章与文章之间的关联度其实还是蛮高的。在文章中,你会遇…

工程(十六)——自己数据集跑Fast_livo

一、基础环境 Ubuntu20.04 ROS noetic PCL 1.8 Eigen 3.3.4 Sophus git clone https://github.com/strasdat/Sophus.git cd Sophus git checkout a621ff mkdir build && cd build && cmake .. make sudo make install 下面两个直接把包下载下来一起编译…

堆排序(C语言版)

一.堆排序 堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 升序:建大堆 降序:建小堆 2. 利用堆删除思想来进行排序 1.1.利用上下调整法实现堆排序 第一步:建堆 好了,每次建堆都要问自己…

STM32G030F6P6读写flash失败问题(HAL)

STM32G030是F0系列的升级版,其在性能上比F0要好很多,具体G0参数如下: 最开始做项目选用的单片机是STM32F030F4P6,但是在后期使用中发现,我的FLASH(16K)不够用了,就选择了STM32G030F6…

计算机网络——基础知识汇总(八)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

每日算法打卡:递归实现排列型枚举 day 2

文章目录 原题链接题目描述输入格式输出格式数据范围输入样例:输出样例: 题目分析示例代码 原题链接 94. 递归实现排列型枚举 题目难度:简单 题目描述 把 1 ∼ n 1 \sim n 1∼n 这 n n n 个整数排成一行后随机打乱顺序,输出…

CISSP 第1章:实现安全治理的原则和策略

作者:nothinghappend 链接:https://zhuanlan.zhihu.com/p/669881930 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 CIA CIA 三性: 机密性:和数据泄露有关。完整性…

57.网游逆向分析与插件开发-游戏增加自动化助手接口-接管游戏的自动药水设定功能

内容来源于:易道云信息技术研究院VIP课 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:51307d6bf69f2f3c645c70d09f841f5e32da79b9 代码下载地址,在 SRO_EX 目录下&…

开源数据可视化分析工具DataEase本地部署并实现远程访问

目录 前言 1. 安装DataEase 2. 本地访问测试 3. 安装 cpolar内网穿透软件 4. 配置DataEase公网访问地址 5. 公网远程访问Data Ease 6. 固定Data Ease公网地址 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊开源数据可视化分析工…

如何更好的进行API管理

相信无论是前端,还是后端的测试和开发人员,都遇到过这样的困难。不同工具之间数据一致性非常困难、低效。多个系统之间数据不一致,导致协作低效、频繁出问题,开发测试人员痛苦不堪。 API管理的难点在哪? 开发人员在 …

深度学习——PIL和OpenCV

PIL 官方文档 格式互转 opencv cv2.imread() 参数: filepath:读入imge的完整路径 flags:标志位,{cv2.IMREAD_COLOR,cv2.IMREAD_GRAYSCALE,cv2.IMREAD_UNCHANGED} cv2.IMREAD_COLOR:默认参数&…

【华为机试】2023年真题B卷(python)-计算礼品发放的最小分组数目

一、题目 题目描述: 又到了一年的末尾,项目组让小明负责新年晚会的小礼品发放工作。 为使得参加晚会的同时所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格…

Python入门第09篇(conda虚拟环境)

前言 一开始默认安装了最新的Python3.12,搞的倒也顺手,看别人会有不兼容的问题,在我这开始没出现。不过坑总会踩到的,这不就出问题了。pip install一个包一直不行,问了下度娘,说由于这个包使用了一些新技术…

007、控制流

先看下本篇学习内容: 通过条件来执行 或 重复执行某些代码 是大部分编程语言的基础组成部分。在Rust中用来控制程序执行流的结构主要就是 if表达式 与 循环表达式。 1. if表达式 if表达式允许我们根据条件执行不同的代码分支。我们提供一个条件,并且做出…

JavaWeb小项目练习(基于三层架构实现登录,对表增,删,改,查的操作)

一 创建项目并修改项目结构 File->New->Project新建一个名为javaweb01的工程 1 2 javaweb01->New->Module新建一个名为MyManage的模块 1 2 将MyManage模块设置为支持web项目 1 2 将web项目重命名并移动到main路径下 配置pom文件(文件依赖,打包方式,以及支持加载…

24年上半年想考软考,小白如何备考?

软考科目的考试时间: 软考考试时间: 软考高级有三科(机考):《综合知识》、《案例分析》、《论文》 软考中级、初级(机考): 《基础知识》、《应用技术》 考试报名官网:中…

SpringBoot集成 Websocket 实现服务与客户端进行消息发送和接收

介绍 WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。 效果 客户端效果 服务端日志 pom依赖 <!-- websocket --> <dependency><groupId>org.…