当前位置: 首页 > news >正文

Git基本操作(2)

Git基本操作(2)

  • 上交文件之后,git文件的变化
    • git cat-file
  • HEAD指针里面有啥
  • 文件被修改
    • git status
    • git diff + 文件名
  • 版本回退(git reset)
  • 撤销回退
    • git reflog
  • 撤销的三种情况
    • 还没有add
      • git checkout -- [file]
    • 已经add还没有commit
    • 已经add且commit
  • 从本地仓库删除文件
    • git rm 文件名

今天我们来继续了解Git的操作

上交文件之后,git文件的变化

我们之前不是上交了几个文件嘛,我们可以看看我们隐藏的.git文件发生什么变化没有:
在这里插入图片描述
我们发现,我们的对象库中记录了每次上交的commit编号,而编号的前两位就是此次上交储存在对象库中的文件名。

objects 为Git的对象库,里面包含了创建的各种版本库对象及内容。当执行git add 命令时,暂存区的目录树被更新,同时⼯作区修改(或新增)的文件内容被写⼊到对象库中的⼀个新的对象中,就位于?“.git/objects”?目录下,查找object时要将commit id 分成2部分,其前2位是⽂件夹名称,后38位是文件名称

git cat-file

找到这个⽂件之后,⼀般不能直接看到里面是什么,该类⽂件是经过? sha (安全哈希算法)加密过的文件,好在我们可以使用 git cat-file 命令来查看版本库对象的内容:
在这里插入图片描述
其中还有一行tree b7a6dcbed4b5f267fde31ed7438195daaace7755,我们也可以打印来看看
在这里插入图片描述
如果我们此时继续查看,我们就可以查看My_file里面的内容:
在这里插入图片描述
因为我的My_file里面没有任何内容,所以没有打印任何内容。
通过这次操作,我们可以大概理解,git会记录我们的修改操作,我们找到对应的修改操作之后,就可以找到对应的文件。

HEAD指针里面有啥

除此之外,我们可以看看HEAD指针里面有啥:
在这里插入图片描述
在这里插入图片描述
我们来看看日志:
在这里插入图片描述
这时候我们知道了,HEAD指针里面储存了最近一次上交时的commit编号。

文件被修改

首先,我们得知道git是追踪修改痕迹(这里的修改痕迹指的是新增文件,修改文件,删除文件)的版本控制器。我们之前把My_file文件已经上交了,如果此时我们将My_file里写入文字:
在这里插入图片描述
此时我们修改了工作区中的My_file文件。

git status

此时我们可以用git status来查看我们git仓库的状态:
在这里插入图片描述
这里提示我们工作区中一个文件被修改了,就是我们的My_file。而我们的暂存区没有改动。

git diff + 文件名

我们可以用git diff + 文件名来查看到底我们的文件有了哪些变化:
在这里插入图片描述
我们看到带有加号的内容就是新增的内容。
我们还可以用git diff HEAD – [file] 命令来查看版本库和工作区文件的区别。

我们了解好了状态之后,我们就可以把文件提交暂存区:
在这里插入图片描述
这个时候我们再来看仓库的状态:
在这里插入图片描述
这个时候显示的是,,修改需要被commited了,我们此时commit一下:
在这里插入图片描述
这时候,显示的是没有什么需要被提交,工作区是干净的。

版本回退(git reset)

git最重要的功能之一就是版本回退:

之前我们也提到过,Git能够管理⽂件的历史版本,这也是版本控制器重要的能⼒。如果有⼀天你发现之前前的⼯作做的出现了很大的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能了。
执行git reset 命令⽤于回退版本,可以指定退回某⼀次提交的版本。要解释⼀下“回退”本质是要将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定:
git reset 命令语法格式为: git reset [–soft | --mixed | --hard] [HEAD]
–mixed 为默认选项,使⽤时可以不⽤带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。
–soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
–hard 参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要⽤这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使用该参数前⼀定要慎重。
• HEAD 说明:
◦ 可直接写成commit id,表示指定退回的版本
◦ HEAD 表示当前版本
◦ HEAD^ 上⼀个版本
◦ HEAD^^ 上上⼀个版本
◦ 以此类推…
• 可以使用〜数字表示:
◦ HEAD~0 表示当前版本
◦ HEAD~1上⼀个版本
◦ HEAD^2 上上⼀个版本

为了演示,我们做一些准备工作:
在这里插入图片描述
现在我们想退回到第一次提交的版本,我们现在可以用git reset来进行回退,但是在这之前,我们要弄清工作区 暂存区 版本库中的内容:
我们现在工作区 暂存区 版本库的内容都是第二次提交的内容:
在这里插入图片描述
我们的 –soft 参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本
在这里插入图片描述
我们的 –mixed 为默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件件保持不变
在这里插入图片描述
我们的 –hard 参数将暂存区与工作区都退回到指定版本。切记用作区有未提交的代码时不要用这个命令,因为工作区会回滚,你没有提交的代码就再也找不回了,所以使用该参数前⼀定要慎重。
在这里插入图片描述
我们这里演示一下–soft选项:
在这里插入图片描述
我们来查看仓库的状态:
在这里插入图片描述
我们来看看版本库和工作区文件的区别:
在这里插入图片描述
再来看看工作区和暂存区的区别:
在这里插入图片描述
发现版本库的内容已经回退,工作区和暂存区的内容没有回退。

除此之外,我们还可以利用commit的id来回退,我们打印日志:
在这里插入图片描述
找到第一次上交的commit编号,然后用类似的方法:
在这里插入图片描述

撤销回退

拿上面举例,我后悔撤销了,该怎么办呢?其实,我们如果能拿到第二次提交时的commit的id,就没问题。
在这里插入图片描述
但是这是因为凑巧我们打印了第二次提交时的commit的id,要是万一没打印该怎么办?

git reflog

也许还可以补救,我们可以用git reflog命令,可以查看我们本地的每一次命令:
在这里插入图片描述
HEAD前面的部分commit的id也可以帮助我们进行回退:
在这里插入图片描述
但是,现实开发中,因为一直再进行开发,id号什么的,早就忘的一干二净了,所以还是小心点为上策~。

撤销的三种情况

还没有add

这个时候,我们只是在工作区进行了修改,还没有进行add。
假设,我现在对我们的文件进行了修改:
在这里插入图片描述
现在我想回到修改之前的版本,我们有一条命令:

git checkout – [file]

git checkout – [file] 命令让工作区的
文件回到最近⼀次 add 或 commit 时的状态。要注意 git checkout – [file] 命令中的
– 很重要,切记不要省略,⼀旦省略,该命令就变为其他意思了

在这里插入图片描述

已经add还没有commit

这个时候我们可以用–mixed选项:

 git reset HEAD 文件名

因为–mixed是默认的,所以不用再写。

已经add且commit

这个时候只能用–hard:

git reset --hard 想回退的版本的commitid

这个时候希望文件还没有交到远程仓库上,要是交了,事情就麻烦了。

从本地仓库删除文件

如果我们直接在工作区删除文件,git会记录我们的修改的:
在这里插入图片描述
我们只删除了工作区的,并没有删除暂存区的,要删除暂存区的,我们要使用:

git rm 文件名

在这里插入图片描述
删除之后,记得commit我们的修改痕迹:
在这里插入图片描述

相关文章:

Git基本操作(2)

Git基本操作(2) 上交文件之后,git文件的变化git cat-file HEAD指针里面有啥文件被修改git statusgit diff 文件名 版本回退(git reset)撤销回退git reflog 撤销的三种情况还没有addgit checkout -- [file] 已经add还没…...

编程笔记 Golang基础 023 切片

编程笔记 Golang基础 023 切片 一、切片二、定义与初始化三、基本操作四、示例 Go语言中的切片(slices)是基于数组的抽象数据类型,它提供了一种灵活的方式来处理可变长度的数据序列。切片本身不存储任何数据,而是指向底层数组的一…...

qt 软件发布(Windows)

1. 开发环境 QtCreator MSVC编译器 2. 源码编译 生成release或者debug版本的exe可执行文件(x64或x86) 3. windeployqt 打包 ①左下角开始菜单栏找到QT的命令交互对话框,如下图MSVC 2017 64-bit(根据第二步编译的类型选择64位或者32位)。 ②cd 切换到第二步可…...

《汇编语言》- 读书笔记 - 第11章-标志寄存器

《汇编语言》- 读书笔记 - 第11章-标志寄存器 标志寄存器指令与标志位关系11.1 ZF(Zero Flag,零标志位)11.2 PF(Parity Flag,奇偶标志位)11.3 SF(Sign Flag,符号标志位)处…...

1.QT简介(介绍、安装,项目创建等)

1. QT介绍 Qt(官方发音 [kju:t])是一个跨平台的C开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序 Qt 是纯 C 开发的,正常情况下需要先学习C语言、然后在学习C然后才能使用…...

【服务器】服务器推荐

一、引言 在数字世界的浪潮中,服务器作为数据存储和处理的基石,其重要性不言而喻。而在这个繁星点点的市场中,雨云以其独特的优势和超高的性价比,逐渐成为众多企业和个人的首选。今天,就让我带你走进雨云的世界&#…...

信号系统之线性图像处理

1 卷积 图像卷积的工作原理与一维卷积相同。例如,图像可以被视为脉冲的总和,即缩放和移位的delta函数。同样,线性系统的特征在于它们如何响应脉冲。也就是说,通过它们的脉冲响应。系统的输出图像等于输入图像与系统脉冲响应的卷积…...

uniapp腾讯地图JavaScript Api,H5端和原生APP端可用

因项目需要,在uniapp中集成使用腾讯地图,为了方便维护,希望通过一套代码实现H5和APP同时可用。H5显示相对简单,APP端比较麻烦,记录下实现过程 一、集成步骤 1.使用 renderjs script标签使用renderjs,因为…...

MyBatisPlus:PG数组类型自动映射问题

引言: PostGreSQL数据库提供了丰富的数据类型,通过查看官网文档,我们也可以发现,PG也提供了对数组类型的支持。 但是在实际开发中,我们通常是使用MyBatis/MyBatisPlus这种半自动ORM映射框架来实现数据库/表数据基本的增删改查,以及其它操作。那么,问题来了,如何…...

Data-Shape制作UI节点简介

很多小伙伴对于Data-Shape制作简单的UI都是似懂非懂,群里很多小伙伴也总是询问相关的问题,那么,今天我就简单举几个例子,专门介绍下Data-Shape创建简单UI的教程。 首先,本次教程,使用的是Data-Shape 2021.…...

kubernetes负载均衡部署

目录 1.新master节点的搭建 对master02进行初始化配置(192.168.88.31) 将master01的配置移植到master02 修改master02配置文件 2.负载均衡的部署 两台负载均衡器配置nginx 部署keepalived服务 所有node节点操作 总结 实验准备: k8s…...

NestJS入门6:日志中间件

前文参考: NestJS入门1 NestJS入门2:创建模块 NestJS入门3:不同请求方式前后端写法 NestJS入门4:MySQL typeorm 增删改查 NestJS入门5:加入Swagger 1. 安装 nest g middleware logger middleware​ ​ ​ 2. lo…...

CommonJS、require、moudle实现两个文件传参

目的:实现两个文件传参 文件A给B传入一个参数,并且文件B代码执行后再传回A。 场景 拆分express项目中的app.js文件中的路由、项目越大会使app.js文件变大,复杂 如何使用 app.js文件 导入路由文件调用路由文件,调用的时候传入…...

关于php、php-fpm的解释

PHP语言是由PHP程序解释的,而不是由php-fpm程序解释的。 PHP(Hypertext Preprocessor)是一种通用开源脚本语言,最初是为创建动态Web页面而设计的,但现在也可以用于命令行脚本编写等用途。PHP程序通常由Web服务器&…...

【CMake】(8)包含库文件

示例项目结构 假设你的项目结构如下所示: 项目根目录/ ├── CMakeLists.txt ├── include/ │ └── head.h ├── lib/ │ └── libcalc.a └── src/└── main.cpp链接库 link_directories和target_link_libraries指令用于配置和链接库文件。 link_direc…...

【 JS 进阶 】Web APIs (二)

“人生如舞台,每一个瞬间都是一场精彩的表演。在舞台的灯光下,以坚韧为舞伴,跳出自己的独特舞步,创造属于自己的绚丽人生芳华。” - 露易丝梭罗 学习会为 DOM 注册事件,实现简单可交互的网页特交。 事件是编程语言中的…...

解决弹性布局父元素设置高自动换行,子元素均分高度问题(align-content: flex-start)

案例&#xff1a; <view class"abc"><view class"abc-item" v-for"(item,index) in 8" :key"index">看我</view> </view> <style lang"less">.abc{height: 100px;display: flex;flex-wrap: …...

什么是负载均衡集群?

目录 1、集群是什么&#xff1f; 2、负载均衡集群技术 3、负载均衡集群技术的实现 4、实现效果如图 5、负载均衡分类 6、四层负载均衡&#xff08;基于IP端口的负载均衡&#xff09; 7、七层的负载均衡&#xff08;基于虚拟的URL或主机IP的负载均衡) 8、四层负载与七层…...

【es6】的新特性

声明语法 letconstclass字符串/函数/对象/数组的新语法/扩展功能模版字符串 反引号标签函数Proxy /ReflectPromiseclsss & static 静态方法 & extends 继承SetMapSymbolfor of 可迭代对象迭代器模式 通过 Symbol.interator 对外提供统一个接口外部可以通过 for...of 去…...

Java中的多线程是如何实现的?

在Java中&#xff0c;多线程的实现主要依赖于java.lang.Thread类和java.util.concurrent包中的类。以下是Java实现多线程的基本方法和概念&#xff1a; 1. **继承Thread类&#xff1a;** - 创建一个新的类继承自Thread类。 - 重写Thread类的run()方法&#xff0c;定义线…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代&#xff0c;运营商作为信息通信网络的核心枢纽&#xff0c;承载着海量用户数据与关键业务传输&#xff0c;其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级&#xff0c;传统安全防护体系逐渐暴露出局限性&a…...

LangChain【6】之输出解析器:结构化LLM响应的关键工具

文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器&#xff1f;1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...

二维数组 行列混淆区分 js

二维数组定义 行 row&#xff1a;是“横着的一整行” 列 column&#xff1a;是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...

多模态大语言模型arxiv论文略读(110)

CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文标题&#xff1a;CoVLA: Comprehensive Vision-Language-Action Dataset for Autonomous Driving ➡️ 论文作者&#xff1a;Hidehisa Arai, Keita Miwa, Kento Sasaki, Yu Yamaguchi, …...