Git分支操作

Git分支操作

  • 理解分支
  • 查看当前分支
    • git branch 查看有几个分支
    • git branch + 新分支的名字 创建新分支
    • git checkout -b 分支名 直接创建并切换到该分支下
  • 切换分支
    • git checkout 分支名 切换到指定分支
  • 合并分支
    • git merge 分支名 合并指定名字的分支
  • 删除分支
    • git branch -d 分支 删除指定分支
  • 合并冲突
    • git log --graph --pretty=oneline --abbrev-commit 通过日志查看合并情况
  • 合并模式
    • Fast——forward模式
    • no-ff模式
  • 分支策略
  • bug分支
    • git stash 储存改动
    • git stash list
    • 新建分支来解决bug
    • git stash pop 恢复修改
  • 强制删除分支git branch -D 分支名

今天我们要学习的是Git一个非常重要的功能——分支操作,如果还没有看过前两次Git操作的小伙伴可以点击这里:

https://blog.csdn.net/qq_67693066/article/details/136161046

https://blog.csdn.net/qq_67693066/article/details/136186578

理解分支

在学习分支操作之前,我们要理解一下分支,分支简单一点来说就是平行宇宙
大家看过蜘蛛侠的《平行宇宙》吗,假设这是现在我身处的时空:
在这里插入图片描述
但是可能还有另一个时空的我正在干其他的事:
在这里插入图片描述
这个时候时空混乱,第一平行宇宙和第七平行宇宙竟然重合了!
在这里插入图片描述
这个时候造成了时空大混乱,地球危在旦夕,叭叭叭…。总之Git的分支和这个平行宇宙的概念差不多。

查看当前分支

git branch 查看有几个分支

git branch可以查看当前所处的分支:
在这里插入图片描述
星号在哪个分支前,就代表我们在哪个分支。我们可以看到我们现在在master这个分支下:
我们也可以查看.git/refs/heads来查看我们到底有几个分支:
在这里插入图片描述
不知道大家还记不记得我们之前版本库中的HEAD指针,现在我们处在master分支下,我们的HEAD指针就会指向master,master会指向我们最新一次的提交:
在这里插入图片描述
我们可以打印一下master里面的内容:
在这里插入图片描述
在这里插入图片描述

git branch + 新分支的名字 创建新分支

我们可以git branch + 新分支的名字用来创建新分支:
比如我们创建一个dev的新分支:
在这里插入图片描述
我们看到了我们的新分支,我们也可看看heads文件下有没有多什么东西:
在这里插入图片描述
发现多了一个dev,我们可以把它打印出来看看:

发现有点眼熟,我们再打印更清楚一点:
在这里插入图片描述
发现这是master上最新一次的提交,dev也指向他了:
在这里插入图片描述

git checkout -b 分支名 直接创建并切换到该分支下

git checkout -b 分支名 直接创建并切换到该分支下
在这里插入图片描述

切换分支

git checkout 分支名 切换到指定分支

我们可以用 git checkout 分支名,切换到指定分支:
在这里插入图片描述
这个时候我们再来git branch:
在这里插入图片描述
星号在dev前,说明当前在dev分支下
在这里插入图片描述

我们尝试在dev分支下做一些改动:
我在dev分支下创建一个新文件:
在这里插入图片描述

我把这个新的文件提交到版本库中:
在这里插入图片描述
这个时候我们的时间线上多了一条dev上的事件:
在这里插入图片描述这个时候,如果我们再切换到master分支下:
在这里插入图片描述会发现,我们刚才建的文件不见了,这其实也很好理解,你在dev分支下的操作,关你master分支什么事?我们切回来了master,自然看不到dev下的文件了。

合并分支

要想master看见dev下的操作,我们就要合并dev到master,要合并dev首先我们要回到master分支上。

git merge 分支名 合并指定名字的分支

git merge 分支名,合并指定名字的分支:
在这里插入图片描述
这个时候,我们再来看看我们的文件:
在这里插入图片描述发现有我们新建的文件了,这个时候master指向了dev事件的节点:
在这里插入图片描述
我们打印一下master里面的内容看看:
在这里插入图片描述

并且仓库是干净的状态:
在这里插入图片描述

删除分支

git branch -d 分支 删除指定分支

我们可以用git branch -d 分支 删除指定分支(首先要切到在非删除的分支上):
比如我想在master分支上删除dev分支(删除dev这个分支的操作不能在dev上,不能自己删除自己):
在这里插入图片描述这个时候dev就被删除了:
在这里插入图片描述

合并冲突

我们现在有这么一个情况,我们现在有dev,和master两个分支,且两个分支上都有new_file的文件(文件内容都是相同的,都是aaa):

在这里插入图片描述我们在master下看一下这个New_file:
在这里插入图片描述我们切换到dev下,查看New_file:
在这里插入图片描述
在这里插入图片描述我们现在对dev下的New_file中内容改为bbb:
在这里插入图片描述然后提交:
在这里插入图片描述
这个时候dev分支有变化:
在这里插入图片描述我们切换到master分支下,修改master下的New_file文件改为ccc:
在这里插入图片描述然后提交:
在这里插入图片描述

在这里插入图片描述
这个时候我们如果合并,就会出现问题:
在这里插入图片描述
因为两个分支上都修改了New_file,git并不知道你要保留哪一行,所以,这个时候我们进入New_file:
在这里插入图片描述从中间的等号线划开,上面是我们master(HEAD指向的的分支)的修改,下面是dev分支的修改,我们要哪个就保留哪个:
我们保留dev的:
在这里插入图片描述
完成之后,我们要重新add,commit一次,这个非常重要:
在这里插入图片描述
这个时候,我们就合并了dev:
在这里插入图片描述

git log --graph --pretty=oneline --abbrev-commit 通过日志查看合并情况

在这里插入图片描述

合并模式

Fast——forward模式

如果我们合并分支之后,可以看看有没有这一行:
在这里插入图片描述有这一行,就说明是Fast——forward模式,在这个模式下我们通过日志查看合并情况是不能看到新的修改是合并的还是自己提交的。(就像这张图):
在这里插入图片描述

但是,在合并冲突部分,我们也看到通过解决冲突问题,会再进行⼀次新的提交,那么这就不是 Fast ——forward 模式了,这样的好处是,从分支历史上就可以看出分支信息。就像我们上图那样:
在这里插入图片描述

no-ff模式

git支持我们禁用Fast——forward模式,我们只需要在合并的时候带上–no-ff:

git merge --no-ff -m "XXXXXXXXX" 你要合并的分支

在这里插入图片描述
这个时候的状态为:
在这里插入图片描述

分支策略

在实际开发中,我们应该按照⼏个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅⽤来发布新版本,平时不能在上面干活;
一般都在dev的分支上工作,等到开发完成,才往master合并

多人协作开发一般都像这样:

在这里插入图片描述

bug分支

有时候,master上有bug,导致程序有问题,这个时候我们不能直接在master上直接修,我们要在其他分支修好,然后才往master上并:

假设现在有这么一个场景:
在这里插入图片描述

假设,我的的dev2下的My_file正在进行开发:
在这里插入图片描述
首先我们要做的,我们的My_file文件在开发,我们的把它先储存起来:

git stash 储存改动

我们可以用git stash 储存改动:
在这里插入图片描述
我们可以看看:
在这里插入图片描述

git stash list

这里提一下,我们可以用git stash list来查看我们的改动:
在这里插入图片描述

这个stash文件里储存有我们的改动。这个时候我们再看My_file:
在这里插入图片描述发现改动已经没有了,因为我们的改动已经储存起来了。

新建分支来解决bug

这个时候我们创建一个新的分支,来解决我们的问题,首先我们先切到master上:
在这里插入图片描述切到fix_bug上,然后我们进行修复:
在这里插入图片描述记得add,commit:
在这里插入图片描述

我们情况是这样的:
在这里插入图片描述
这个时候,我们往master上合并就可以了:
在这里插入图片描述在这里插入图片描述
换到master上,我们看一下:
在这里插入图片描述这个时候,我们修好了bug。

git stash pop 恢复修改

这个时候我们完成了bug的修复,这个时候我们dev2操作上修改我们要恢复过来,我们切到dev2上:
执行git stash pop
在这里插入图片描述
在这里插入图片描述
这个时候我们得进度又回来了,我们继续开发:
在这里插入图片描述这个时候注意,我们dev2上并没有合并fix_bug,如果此时直接合并到master上,肯能会有更大的bug,所以在这里我们dev2合并master
在这里插入图片描述

强制删除分支git branch -D 分支名

这里说一下,如果我们有分支,进行了一些工作,但是还没有合并到master上,这个时候git会保护这个分支不让我们删:

在这里插入图片描述这个时候把d换为D即可:
在这里插入图片描述

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

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

相关文章

Linux:kubernetes(k8s)探针的简介(7)

相当于我们用于监控容器的一个东西,通过给我们的不同探针来判断容器内的状态情况,实现故障的一个自动恢复。 我们在上一章的yaml文件中写入了一个这个东西 那么他什么情况下重启,就是通过探针进行一个监控,加入监控某一个端口&…

云原生(一)、linux快速上手

Linux是一种开源的Unix-like操作系统内核。它是由Linus Torvalds于1991年首次发布,其后经过全球的自由软件社区的持续开发和改进。Linux内核是操作系统的核心部分,但通常与GNU项目合作,以形成完整的操作系统,被称为Linux发行版&am…

ROS从入门到精通4-2:Docker安装ROS、可视化仿真与终端复用

目录 0 专栏介绍1 Docker安装ROS2 Docker可视化仿真2.1 显示配置2.2 启动容器 3 终端复用工具3.1 session操作3.2 window操作3.3 pane操作3.4 其他操作 0 专栏介绍 本专栏旨在通过对ROS的系统学习,掌握ROS底层基本分布式原理,并具有机器人建模和应用ROS…

机器学习项目的流程:从数据到部署

目录 前言1 数据收集1.1 任务定义与数据需求明确1.2 数据采集与清洗 2 模型训练2.1 数据预处理2.2 选择适当的模型2.3 模型训练与调优2.4 模型评估 3 模型部署3.1 部署环境准备3.2 模型集成3.3 测试和优化 4 模型维护和更新4.1 模型性能监测4.2 数据漂移处理4.3 定期更新模型 结…

Unity 整体界面淡入淡出效果

在Unity中,如果我们要实现控制多个组件同时淡出,同时淡入的效果,可以使用DOTween插件实现。 如图,一个页面中带有背景,一张图片,一个文本,一个滑动条。 要实现以上界面的整体淡入淡出&#xff…

PolarDB for PostgreSQL-概述

阿里云数据库的概述 本篇罗列了一些知识点和结构。 日志 2. 同步复制:下降20% 异步复制:数据丢失风险, 部署 1.示例: vim polarx.toml 1.测试主库和备库数据一致性 备库是否一致性读 一个节点荡掉,提供服务。 GMS CN…

【DAY08 软考中级备考笔记】机组:计算机组成和数据转换

机组:计算机组成和数据转换 3月2日 – 天气:晴 1. 计算机的基本组成结构 计算机的硬件由运算器,控制器,存储器,输入和输出设备组成其中,控制器和运算器成为CPU控制器又分为了内部存储器和外部存储器。内部…

应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

作者:古琦 在现代软件架构中,微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能,它们共同工作以提供完整的服务。由于微服务架构的分散特性,监控变得至关重要,有效的微服务监控是…

AI预测福彩3D第4弹【2024年3月7日预测】

经过前面几次的预测,7码命中率已经有了明显提高,今天,继续咱们的预测。 老规矩,先给各位展示下百十个的神经网络蒙特卡洛统计频次图及部分号码的冷温热走势图。 最终,经过研判分析,2024年3月7日福彩3D的七…

sql 注入 之sqli-labs/less-5 双注入,也称:报错注入

该关卡返回正确或者错误页面,还有错误的代码,所以可以使用报错注入。报错注入的方式: updatexml 函数注入: mysql5.1.5 版本以上支持该函数,返回数据限制32位 模板:select * from user where id1 and (updatexml(&q…

一次一对一服务引起的沉思和笑话(微信号Stefan)

前情提要 客户需求: 分析页面代码和接口请求协议和参数需求,将人工下载视频怎么获得最终的视频链接,这一逻辑清晰的展示并讲解清除。我询问了是否需要成品爬虫,他说代码他自己能搞定。 我给的价格选择: 第一种、首…

超好用的golang工具分享

go-callvis-代码调用关系的可视化工具 go-callvis是一个代码调用关系的可视化工具,它可以帮助我们了解指定项目代码的结构,以达到更快的理解代码意图的目的。 工具使用简单,步骤如下: // 1. 安装 git clone https://github.com…

蓝桥杯练习系统(算法训练)ALGO-983 最大获利

资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 Chakra是一位年轻有为的企业家,最近他在进军餐饮行业。他在各地开拓市场,共买下了N个饭店。在初期的…

python 爬虫爬取知乎LOL图片(亲测)

获取信息 访问url后按f12调试 点击network 定位图片信息: 可以看到,每个图片的名字和下载地址在标红处,示例如下: data-actualsrc“https://pic4.zhimg.com/v2-1681ff26afbd5f92aa5790b4dee6a63f_b.jpg” 现在就是requests访问…

Linux之线程概念

目录 一、细粒度划分 1、堆区细粒度划分 2、物理内存和可执行程序细粒度划分 3、虚拟地址到物理地址的转化 二、线程的概念 1、基本概念 2、线程的优点 3、线程的缺点 4、线程异常 5、线程用途 三、Linux下的进程和线程 一、细粒度划分 1、堆区细粒度划分 在语言…

MySQL 备份方案

优质博文:IT-BLOG-CN 一、为什么要备份 【1】容灾恢复:硬件故障、不经意的 Bug 导致数据损坏,或者服务器及其数据由于某些原因不可获取或无法使用等(例如:机房大楼烧毁,恶意的黑客攻击或 Mysql 的 Bug 等&…

8、Linux驱动开发:驱动-读写接口实现(readwrite)

目录 🍅点击这里查看所有博文 随着自己工作的进行,接触到的技术栈也越来越多。给我一个很直观的感受就是,某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了,只有经常会用到的东西才有可能真正记…

Seata 2.x 系列【4】产品简介

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Seata 版本 2.0.0 源码地址:https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 发展历史3. 核心术语3.1 TC3.2 TM3.3 RM 4.…

国创证券|存钱有窍门,掌握这五个窍门利息高出不少?

大部分居民会把手中闲置的资金存入银行,享用安稳的收益,其间存在以下五个诀窍: 1、比照不同银行的利率 储户在去银行存钱时,能够比照不同银行的利率,尽量地挑选利率较高的银行存,来获取较多的收益&#x…

URL?后参数有特殊字符问题

前端对于URL的参数不做处理 不处理、用URLDecoder.decode()处理、用URLEncoder.encode()处理、用URLEncoder.encode()处理后再用URLDecoder.decode()处理 结果 前端对于URL的参数用encodeURIComponent(‘XF-OPPZZD-26*316’)处理 结果 前端不处理有&字符时 结果会把后…