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

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原理与使用(二):分支管理的全部内容,希望对大家有所帮助!

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

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

相关文章

NSSCTF 1zjs

开启环境: 搞就完事了,别玩魔法! 源码打开 点击访问:./dist/index.umd.js" 搜索php,找到23条相关的,注意到有一个特别的信息: PERFORMANCE OF THIS SOFTWARE.Your gift just take it : /fk3f1ag.php 访问: node4.anna.nssctf.cn:28325/fk3f1ag.php 得到这样: ([![]…

【Java 21 新特性】顺序集合(Sequenced Collections)

1 摘要 引入新的接口表示具有定义的遇到顺序的集合。每个这样的集合都有一个明确定义的第一个元素、第二个元素,依此类推,直到最后一个元素。提供统一的API来访问它的第一个和最后一个元素,并以相反的顺序处理它的元素。 "生活只能向后…

【算法与数据结构】968、LeetCode监控二叉树

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题的一共有两个难点,一个在于如何遍历二叉树(前中后遍历,选择什么…

MySQL 时间日期函数,流程控制函数,加密解密函数以及聚合查询函数

注:本文仅作为查找函数和部分理解使用,希望能给大家带来帮助 以下函数均可以使用 SELECT NOW()等函数 FROM DUAL;来测试 //其中dual是一个准们用来测试的测试表 1.时间日期函数 1.1 获取时间的函数 重点记忆前三个红色标注的函数, 第一个函数返回值如2024-01-02的形式 第二个如…

如何使用curl在PHP中同时上传文件和其他数据?

问CHAT&#xff1a;举个例子说明如何使用curl在PHP中同时上传文件和其他数据&#xff1f; CHAT回复&#xff1a;以下例子为&#xff1a; php <?php $url http://www.example.com/path/; $filename path/to/your/file.png; $fields array( fieldParam1 > someValue, …

C++摸版(初阶)----函数模版与类模版

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…

Mac环境下反编译apk

Mac环境下反编译apk 安装反编译工具dex2jar&#xff1a;[官网下载](https://sourceforge.net/projects/dex2jar/)JD-GUI&#xff1a;[官网下载](https://jd-gui.apponic.com/) 实操1. 将需要反编译的 .apk 文件放在下载的 dex2jar 文件夹目录下2. 使用 cd /xxx/dex2jar-2.0 命令…

深度生成模型之GAN的评估 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN的评估图像翻译的应用1. 风格迁移2. 数据增强3. 经典图像任务4. 内容创作5. 人脸图像编辑6. 人体图像编辑 图像翻译模型1. 有监督图像翻译模型2. 无监督图像翻译模型3. 多域图像翻译模型 深度生成模型之GAN的评估 图像翻译的应用 1. 风格迁移 各类…

120基于matlab的LMS自适应滤波算法

基于matlab的LMS自适应滤波算法&#xff0c;如、解相关LMS算法&#xff0c;滤波型LMS算法&#xff0c;变换域LMS算法&#xff0c;输出滤波前后及学习曲线图。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 120自适应滤波算法变换域LMS算法 (xiaohongshu.com…

k8s的陈述式管理

k8s的陈述式管理&#xff1a; 所谓的陈述式管离也就是命令行工具 优点&#xff1a;90%以上都可以满足 对资源的增删查比较方便&#xff0c;对改不是很友好 缺点&#xff1a;命令比较冗长&#xff0c;复杂&#xff0c;难记 声明式&#xff1a; k8s当中的YAML文件来实现资源管…

测试要不要写测试用例(多方面剖析)

前言 最近在网上看到关于这样的一个话题“测试需要写测试用例吗&#xff1f;”&#xff0c;引起了很多同学的讨论。这段话是这样的&#xff1a; 测试用例主要作用&#xff1a;有效地评估软件的质量&#xff0c;测试用例质量体现了测试的质量。 下面摘取一部分同学的观点&…

对比开源大语言模型的自然语言生成SQL能力

背景 NL-to-SQL&#xff08;自然语言到结构化查询语言&#xff09;任务是自然语言处理&#xff08;NLP&#xff09;领域的一个难题。 它涉及将自然语言问题转换为 SQL 查询&#xff0c;然后可以针对关系数据库执行该查询来回答问题。 该任务是 NLP 中的一个专门子领域&#xf…

Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

在数字化采购领域&#xff0c;企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术&#xff0c;我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力&#xff0c;通过待办消息、招标公告、中标公告和信息发布等功能模块…

SQL 在已有表中修改列名的方法

文章目录 1. MySQL2. SQL Server3. Oracle / PostgreSQL Question&#xff1a; 假设有一张表 StudentInfo&#xff0c;表中有一个列名是 Student_Name &#xff0c;想要把这个列名改成 StudentName 应该如何操作&#xff1f; 建表语句如下&#xff1a; --建表 if object_id(S…

Java-网络爬虫(一)

文章目录 前言一、网络爬虫1. 介绍2. 爬虫协议3. 法律法规 二、相关知识1. HttpClient2. Jsoup 三、综合案例1. 案例一2. 案例二 四、总结 前言 在大数据时代&#xff0c;信息采集是一项重要的工作&#xff0c;而互联网中的数据是海量的&#xff0c;如果单纯靠人力进行信息获取…

MATLAB习题操作实战

2.1创建一个有7个元素的一维数组&#xff0c;并做如下处理:直接寻访一维数组的第6个元素;寻访一维数组的第1、3、5个元素;寻访一维数组中第4个至最后1个元素;寻访一维数组中大于70的元素。 % 创建一维数组 array [50, 60, 70, 80, 90, 100, 110];% 直接寻访一维数组的第6个元…

【自动驾驶中的SLAM技术】第2讲:基础数学知识回顾

第二讲&#xff1a;基础数学回顾 文章目录 第二讲&#xff1a;基础数学回顾1 几何学1.1 坐标系1.2 坐标变换① 空间向量② 基变换③ 坐标变换④ 总结 1.3 四元数与旋转向量 2 运动学2.1 李群视角2.2 四元数视角2.3 四元数的李代数与旋转向量间的转换2.4 SO(3)t 上的运动学2.5 线…

六、HTML 段落

HTML 可以将文档分割为若干段落。 一、HTML 段落 段落是通过 <p> 标签定义的。 <p>这是一个段落 </p> <p>这是另一个段落</p> 注意&#xff1a;浏览器会自动地在段落的前后添加空行。&#xff08;</p> 是块级元素&#xff09; 二、不…

算法巡练day03Leetcode203移除链表元素707设计链表206反转链表

今日学习的文章视频链接 https://www.bilibili.com/video/BV1nB4y1i7eL/?vd_source8272bd48fee17396a4a1746c256ab0ae https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 链表理论基础 见我的博…

Linux 命令echo

命令作用 输出一行字符串在shell中&#xff0c;可以打印变量的值输出结果写入到文件在显示器上显示一段文字&#xff0c;起到提示的作用 语法 echo [选项] [字符串] 参数 字符含义-n不自动换行-e解释转义字符-E不解释转义字符 如果-e有效&#xff0c;则识别以下序列&…