Git学习笔记(二)

news2024/11/15 23:46:58

导航小助手

四、分支管理

4.1 管理分支

4.2 创建分支、切换分支、合并分支

4.3 删除分支

4.4 合并冲突

4.5 分支管理策略

4.5.1 分支策略

4.6 bug分支

4.7 删除临时分支


四、分支管理

4.1 管理分支

现在介绍一下Git的杀手级别功能之一:分支~

理解分支:

假设 主角A出生在一个 玄幻武侠村,村中现在正准备召开 武林大会,获胜者可赢取村长女儿~

此时,距离武林大会的召开 只剩下半年的时间;在这半年的时间里,A先练习基本功,之后学习降龙十八掌;同村的B 也准备参加武林大会,于是 B也跟着练习了起来;由于A、B天赋差不多,所以两个人对打获胜的几率是 五五开(B指代的是所有A的对手)~

然而,A身为主角,在练习基本功的时候,突然就觉醒了自身的天赋异能——多重影分身;于是 在本体练习降龙十八掌的时候,分身在练习金钟罩铁布衫......

半年时间匆匆而过,在比赛前夕,A收回分身,此时 再与B对战,胜率上升了不知道多少~

有图为证:

 最终,A获得了武林大会的胜利,迎娶了村长的女儿~


作为Git,也有着 "多重影分身" 的功能:也可以分身,也可以合体~

在版本库里面,存在一个 HEAD指针,指向了master,master里面存储了最新一次提交的 commit id:

Git可以使用下面的命令,查看 最新提交的commit id 和 上一次提交的 commit id:

git cat-file -p 最新的commit id


 有图示例: 

当然,HEAD 不仅仅可以指向 master分支,也可以指向其他分支;而被指向的分支 就是当前正在工作的分支,即 add、commit操作 在该分支上提交的~ 

4.2 创建分支、切换分支、合并分支

Git提供了下面的命令,查看当前本地仓库中有哪些分支存在:

git branch

在 master 前面存在了一个 *,表示:目前 HEAD 正指向的是 master分支,master分支 就是当前正在工作的分支~


 我们可以使用下面命令,来创建一个本地分支:

git branch 分支名称

此时,新创建的 dev分支 是基于当前最新版本上的创建的,所以 dev分支 也是指向的是 当前最新提交的~

验证:

一张图总结:


那么,我们怎么样使得 HEAD 指向新创建的 dev分支,让 dev分支 成为工作分支呢?

Git提供了如下的命令,用来 切换分支:

git checkout 所要切换到的分支名

验证:

 此时,一张图总结:


当然,创建分支、切换分支 有两行命令,我们其实也可以用一行命令来达到相同的效果:

git branch 分支1
git checkout 分支1
上面两行代码,可以使用该代码进行替换:git checkout -b 分支1

此时,切换分支之后,就可以在 dev分支 上进行提交操作了~

此时,我们切换到 master分支之后,查看 ReadMe文件 内容,会发现 在 dev分支 上面新增的内容不见了:

此时,我们又切回到 dev分支 上,查看 ReadMe文件内容:

此时,我们再来看一下 dev分支 下面存储了啥 commit id,结果发现:和上次相比,commit id 变了:

此时,一张图总结(红色是master分支,绿色是dev分支):

 当最后切换到 master分支 的时候,看不见 dev分支 的提交也就变得很正常了~


为了在 master分支 上看见 dev分支 上所提交的内容,必须要进行 合并分支 的操作~

想让 master分支 合并 dev分支,必须要先切换到 master分支 上: 

使用下面的命令,来进行分支的合并:

git merge 需要合并的分支
    注意:意思是 当前的分支 合并 需要合并的分支

 

 此时,master分支 就合并 dev分支 成功:

此时,用一张图总结:

4.3 删除分支

需要注意的是,在删除分支的时候,必须是在其他的分支上删除~

即:想要删除 dev分支,可以在 master分支 上删除但是不可以在 dev分支 上删除 dev分支~

删除分支的命令是:

git branch -d 所要删除的分支

此时,用一张图总结:


因为 创建、合并、删除分支 非常快,所以 Git 鼓励使用某一个分支完成某一个任务,合并之后再删除分支,这和直接在 master分支 上面的工作效果是一样的,但是过程更加安全~

4.4 合并冲突

其实,在合并分支的时候,并不是说想合并就可以合并成功的~

在有的时候,合并分支 会发生冲突的情况~

比如说,现在有一 ReadMe文件,文件中内容:aaa on dev branch 没有满足需求,现在需要先创建一个本地分支div1,在此分支下修改成:bbb on dev branch;但是,与此同时 master分支 在 div1分支 修改 ReadMe文件 的时候,也对 ReadMe文件 进行了修改——"ccc on dev branch"~

在这种情况下,Git 在合并分支的时候并不会知道需要保留的是哪份内容,此时就会出现 "合并冲突"问题~

准备工作:

处理 div1分支 上面的问题:

处理 master分支 上面的问题:

此时,用一张图来表示当前的状态:

 此时,如果合并分支的话,就会出现合并冲突:


发现合并冲突后,可以直接查看文件内容:

之后,可以根据自己的需求,来手动保留所需要的代码:

在修复完冲突之后,还需要进行一次提交操作:

此时本地仓库的状态:

进行提交操作之后:

此时仓库的状态:

 此时,用一张图来表示:

最后,不要忘记了,div1分支 使用过后就可以删除了:

 

4.5 分支管理策略

场景一:ff模式

实际上,我们可以使用下面的命令 来查看图示效果:

git log --graph --abbrev-commit

实际上,使用了 Fast-forword模式 合并分支的时候,在删除分支之后,观察分支历史时,会丢掉分支信息;即 看不出来到底是 master分支 正常提交的,还是 其他的分支 merge 合并进来提交的~

此时,用一张图片总结 Fast-forword模式(ff) 提交的


 如果使用 no-ff模式的话,那么 在合并分支的时候,应该使用下面的命令:

git merge --no-ff -m "message" 所要合并的分支名
    注意:message 指的是 描述,因为 no-ff模式 合并后会创建一个 commit,所以需要 -m 和 "message"

此时,用一张图片总结 不是使用 Fast-forword模式(no-ff) 提交的

4.5.1 分支策略

master分支 必须是非常稳定的~

用一张图来总结:

4.6 bug分支

虽然说,线上环境 是稳定的环境;但是 这其实并不是 100% 的稳定:比如说,平常使用的一些 app 也会出现卡死的情况~

那么,在修复 bug 的情况下,肯定是不可以在 master分支 上修复的;我们需要新建一个 bug分支,来专门处理 bug~


现在有这么一个场景:假设现在正在 dev3分支 中开发,开发到一半,还没有提交,发现 master分支 上面出现了 bug~

此时,需要使用到下面的命令:

git stash
    注意:该命令表示 将工作区中的内容进行储存,存储到了 ./git 里面的 stash里面,当然 存储的是已经被 Git追踪管理的文件,即 add、commit过了

如果没有被 Git 追踪管理,那么就肯定存储不了:


此时,就可以创建一个修复bug的分支了;由于是基于 master分支 修复 bug,所以还需要切换到 master分支 上:

此时的状态就是:bug修复了,但是还没有合并到 master分支 上~

此时,就可以观察结果了:

由于 bug 已经修复,但是 dev3 还在开发当中,所以还需要切换到 dev3分支 上进行各种操作:

此时需要恢复存储区里面的内容:

git stash list
//查看 当前的 stash区 存储了哪些内容
git stash pop
//将存储到 stash区 的内容放出来

 

此时,再次查看 ReadMe文件 就可以了:

当然,由于 在 master分支 出现 bug 后提交的基础上创建了 dev3分支,但是 也不会影响 master分支~


最终的目的是让 master分支 合并 div3分支,但是 如果直接切回 master分支 合并的话,可能会出现合并冲突的问题~

这里就直接介绍一种比较好的方法:


第一步:

 第二步:

最后,不要忘记删除分支,留下 master分支:

 

4.7 删除临时分支

在开发过程中,总是有无穷无尽的功能需要新增起来~

此时,有这样一个场景:产品经理 需要新增一个功能,在经过开发一天之后,在临时分支上 还没有 合并到 master分支上,产品经理 突然就说不要这个功能,需要把这个功能取消~

由于是在临时分支上进行操作的,所以还必须要把这个临时分支给删除~

上面曾介绍过一个删除分支的命令:

git branch -d 所要删除的分支

实际上,这个命令 所要删除的分支 其实是已经进行了 merge操作,所以才可以进行删除;而在这种情况下,其实是删除不了的~

此时,只需要使用下面的命令即可强制删除

git branch -D 所需要删除的分支

演示:

此时,检查一遍即可:

 

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

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

相关文章

解决:前端请求跨域问题

解决:前端请求跨域问题 问题一:Access to XMLHttpRequest at https://xxx/ICN40310000075_1687926884828.pdf from origin http://localhost:63342 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requeste…

valgrind检测内存泄漏、越界访问、野指针访问实验

前言 本次测试包括&#xff0c;检测无误的代码&#xff0c;检测内存泄漏&#xff0c;检测访问越界&#xff0c;检测野指针&#xff0c;检测访问已经释放(已经被free)的内存。 一 安装valgrind sudo apt install valgrind 二 无错误 #include <stdio.h> #include <…

leetcode:836. 矩形重叠(python3解法)

难度&#xff1a;简单 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。矩形的上下边平行于 x 轴&#xff0c;左右边平行于 y 轴。 如果相交的面积为 正 &#xff0c;则称两矩形重叠。需要明确的是&…

在图像上绘制图形

1.绘制直线 cv.line(img, (0, 0), (511, 511), (255, 0, 0), 5)2.绘制圆形 cv.circle(img, (256, 256), 60, (0, 0, 255), -1) 3.绘制矩形 cv.rectangle(img, (100, 100), (400, 400), (0, 255, 0), 5)4.向图片中添加文字 cv.putText(img, "hello", (100, 150), cv.F…

google浏览器如何把 develop tools 弹窗设置为一个单独界面

更改默认的弹出式窗口和重定向设置 在计算机上打开 Chrome。在右上角&#xff0c;依次点击“更多”图标 设置。依次点击隐私设置和安全性 网站设置 弹出式窗口和重定向。选择要设为默认设置的选项。 管理特定网站的弹出式窗口和重定向 https://support.google.com/ch…

自动备份Windows的环境变量

执行脚本 ECHO OFF set year%date:~6,4% set month%date:~0,2% set day%date:~3,2% set hour%time:~0,2% set minute%time:~3,2% set second%time:~6,2% set backupTime%year%%month%%day%_%hour%%minute%%second% set>>D:/IDE/databack/pc_path/environment-backup-%ba…

【若依项目学习】day1-启动项目

若依开源框架&#xff0c;前后端分离项目&#xff0c;地址&#xff1a;http://doc.ruoyi.vip/ruoyi-vue/ 先配置环境 JDK1.8&#xff0c; MySQL5.7 &#xff0c;Maven3.6&#xff0c;redis、nginx(可以不配)、 node 具体见&#xff1a;https://ygstriver.blog.csdn.net/articl…

windows——【磁盘】C盘又又双叒叕满了,如何清理爆满的C盘

目录 磁盘又满了&#xff0c;咋整&#xff1f;1.初级版本&#xff0c;用windows自带清理工具【没啥用】2.控制面板&#xff0c;清理系统和保留空间【亲测有用】&#xff08;1&#xff09;在控制面板里面点击系统&#xff08;2&#xff09;在系统里面右键 3.直接删除C盘的文件&a…

家政软件是什么,上门预约家政软件有什么功能?

随着人们生活水平的提高和对便利性的需求增加&#xff0c;家政服务市场正呈现出快速增长的趋势。家政软件作为提供便捷、高效家政服务的工具&#xff0c;将成为满足用户需求的重要方式。这将推动家政软件市场的扩大。那么家政软件具体是什么样的一款软件呢&#xff1f; 家政上门…

额度系统,为什么需要有【预占额度】这个操作?

反向思维&#xff0c;若没有额度预占&#xff0c;系统会有什么问题&#xff1f; 没有额度预占 我们知道&#xff0c;额度预占、额度扣减是搭配调用的。这个流程&#xff0c;是在授信完支用期间的&#xff0c;流程如下图&#xff1a; 额度扣减&#xff1a; 核心建立借据成功&…

Vue3+TS+ElementPlus报错集锦

目录 1、导入TS类型报错 2、使用类型报错 3、Vue3引入文件爆红且不提示 4、为defineAsyncComponent引入的component子组件设置类型 5、类型“undefined”不能作为索引类型使用。 6、为props定义类型报错 7、在tsx中调用表单验证方法报错 8、为defineComponent中的props选…

1_5 Occupancy network

1、BEVerse: Unified Perception and Prediction in Birds-Eye-View for Vision-Centric Autonomous Driving 本文不想已经存在的单一任务优化方法&#xff0c;而是构建BEV的时空视频特征并联合推断视觉自动驾驶多任务。之前的任务是目标检测和地图语义分割一起做&#xff0c;之…

量子力学的起源和基本概念

亲爱的读者&#xff0c; 欢迎回到我们的量子力学系列文章。在我们的第一篇文章中&#xff0c;我们进行了量子力学的总体介绍。今天&#xff0c;我们将深入探讨量子力学的起源和一些基本概念。 量子力学的起源可以追溯到20世纪初&#xff0c;当时的科学家们遇到了一些古典物理…

stm32 + w25qxx + EasyFlash

一&#xff0c;软件介绍 EasyFlash 是一款开源的轻量级嵌入式Flash存储器库&#xff0c;方便实现基于Flash存储器的常见应用开发。适合智能家居、可穿戴、工控、医疗等需要断电存储功能的产品&#xff0c;资源占用低&#xff0c;支持各种 MCU 片上存储器。 [1] 该库目前提供…

CrossOver软件Mac2023下载安装教程

CrossOver是一款可以让Mac和Linux系统中正常运行Windows软件的应用程序。它不像虚拟机一样需要安装Windows系统之后才可以安装Windows的应用程序&#xff0c;这一方式给大多数用户带来了方便。通过CrossOver实现跨平台的文件复制粘贴&#xff0c;使Mac/Linux系统与Windows应用良…

数字图像处理1-概述

目录 一、数字图像与数字图像处理 1. 基本概念 1.1 处理方法通常有: 1.2 图像处理的基本特征∶ 2. 图像处理与图像分析的关系 3. 数字图像处理的优点 二、数字图像处理系统组成及研究内容 1.数字图像处理系统的组成 1.1 基本图象处理系统的结构 1.2 图像输入设备 1.3 扫描仪分…

leetcode 26.删除有序数组中的重复项

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;删除有序数组中的重复项 代码&#xff1a; /*思路&#xff1a;双指针问题[1,1,2]src-> [ 1 , 1 , 2 ]destnums[src] nums[dest] > src;src-> [ 1 , 1 , 2 ]destnums[src]…

volatile和-O3测试

一个延时函数&#xff1a; #include <stdio.h> #include <stdlib.h> #include <time.h> void delay(){int i 0;int j 0;for(i 0;i < 50000;i){for(j 0;j < 50000;j);} }int main(int argc, char **argv){printf("time %ld\n",time(NUL…

碳排放预测模型 | Python实现基于机器学习的碳排放预测模型(模型对比)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于机器学习的碳排放预测模型(模型对比) 碳排放被认为是全球变暖的最主要原因之一。 该项目旨在提供各国碳排放未来趋势的概述以及未来十年的全球趋势预测。 其方法是分析这些国家各…

供应链管理-亿发供应链计划管理系统,赋能中小型制造企业信息化

供应链管理是现代企业成功的关键因素。中小型制造企业可以通过建立有效的供应链管理系统实现成本控制、增加交付速度、增强灵活度&#xff0c;增加客户满意度。供应链管理系统&#xff0c;利用物联网技术工具来实现中小型企业供应链自动化和优化。减少人为错误&#xff0c;增加…