Git基本操作(2)

news/发布时间2024/6/17 18:27:30

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我们的修改痕迹:
在这里插入图片描述

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

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

相关文章

聊聊分库分表

文章导读 背景介绍 随着互联网技术的发展,数据量呈爆炸性增长。大数据量的业务场景中,数据库成为系统性能瓶颈的一个主要因素。当单个数据库包含了太多数据或过高的访问量时,会出现查询缓慢、响应时间长等问题,严重影响用户体验。…

如何在Linux部署OpenGauss数据管理系统并实现公网访问内网数据

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

学习JAVA的第二天(基础)

目录 基本概念 关键字 class关键字 字面量 练习 变量 定义格式 变量使用 数据类型 基本数据类型 标识符 命名规则 键盘录入 1.导包 2.创建对象 3.接受数据 运算符 算术运算符 练习 隐式转换(自动类型提升) 强制转换 自增自减运算符 …

【前端素材】推荐优质后台管理系统Jampack平台模板(附源码)

一、需求分析 后台管理系统(或称作管理后台、管理系统、后台管理平台)是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成,为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

[论文解读]ALOHA 2:用于双手遥控操作的增强型低成本硬件

多样化的演示数据集推动了机器人学习的重大进步,但此类数据的灵活性和规模可能受到硬件成本、硬件鲁棒性和远程操作难易程度的限制。我们推出ALOHA 2,这是ALOHA的增强版本,与原始设计相比,它具有更高的性能、人体工程学和稳健性。…

Spring 容器、核心容器总结

目录 创建容器获取 bean容器类层次结构图核心容器总结容器相关bean 相关依赖注入相关 创建容器 方式一: 类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml");方式二: 文件路径加载配…

TCP Keepalive 和 HTTP Keep-Alive

HTTP 的Keep-Alive 在 HTTP 1.0 中默认是关闭的,如果浏览器要开启 Keep-Alive,它必须在请求的包头中添加: Connection: Keep-Alive然后当服务器收到请求,作出回应的时候,它也添加一个头在响应中: Connec…

基于java+springboot+vue实现的美食信息推荐系统(文末源码+Lw)23-170

1 摘 要 使用旧方法对美食信息推荐系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在美食信息推荐系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发…

Elasticsearch:创建自定义 ES Rally tracks 的分步指南

作者:Alejandro Snchez 按照这个综合教程学习如何制作个性化的 Rally tracks ES Rally 是什么?它的用途是什么? ES Rally 是一个用于在 Elasticsearch 上测试性能的工具,允许你运行和记录比较测试。 做出决策可能很困难&#x…

【kubernetes】二进制部署k8s集群之master节点和etcd数据库集群(上)

目录 前言:关于整个k8s集群的主机规划以及本文部署架构 步骤一:完成操作系统初始化配置 步骤二:完成etcd集群部署 关于etcd集群 ①准备签发证书环境 ②先完成单独一个节点的部署 ③通过部署好的etcd01节点 完成另外两个节点的部署 拓展…

如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具&#xff0…

使用IntelliJ IDEA查看接口的全部实现方法

在大型Java项目中,经常会使用接口和抽象类进行代码设计。为了更好地了解代码结构和功能,我们需要快速查看一个接口的所有实现类。IntelliJ IDEA提供了一些方便的方法来实现这一目标。 1. 点击查看接口的实现子类 在IDEA中,你可以轻松地查看…

南邮概率统计与随机过程练习册答案

**南京邮电大学** **概率统计与随机过程练习册答案简介** 本文档是一份精心整理的南京邮电大学概率统计与随机过程课程的练习册答案集。它旨在为学习该课程的学生提供一个详尽的解题参考,帮助他们更好地理解和掌握概率论与统计学的基本概念和方法。 **内容概览:** - **章节…

发布订阅模式:观察者模式的一种变体

发布-订阅模型(Publish-Subscribe Model)的底层机制通常基于观察者模式。 发布-订阅模型是观察者模式的一种变体。 在观察者模式中,主题(或被观察者)维护了一组观察者,当主题的状态发生变化时&#xff0c…

【day02】每天三道 java后端面试题:Java、C++和Go的区别 | Redis的特点和应用场景 | 计算机网络七层模型

文章目录 1. Java、C和 Go 语言的区别,各自的优缺点?2. 什么是Redis?Redis 有哪些特点? Redis有哪些常见的应用场景?3. 简述计算机网络七层模型和各自的作用? 1. Java、C和 Go 语言的区别,各自的…

2.1_4 进程通信

文章目录 2.1_4 进程通信(一)什么是进程间通信(二)为什么进程通信需要操作系统支持(三)共享存储(四)消息传递(1)直接通信方式(2)间接通…

Mybatis-Plus为数据表字段自动填充创建时间和更新

遇到的问题 练习项目时遇到create_time和update_time数据表字段需要填充时想到每次都要手写代码有点繁琐而且直觉告诉我肯定有办法自动填充。通过查阅相关资料,最终也是成功达成目标。 解决步骤 1.创建自定义类DateAutoFillHandler实现MetaObjectHandler接口 Co…

(十六)devops持续集成开发——jenkins流水线构建之邮件通知

前言 本节内容主要介绍jenkins在流水线任务构建完成后的通知操作,使用jenkins的邮件通知插件完成构建任务结束的通知。一般项目发布都会通知相关的责任人,这样项目发布在出现问题时能够及时的处理。 正文 ①在插件中心安装Email Extension邮件通知插件…

第九天-自动化办公

1.基础-普通文件操作 1. shutil文件操作模块 文件的复制 复制文件 from shutil import copy copy("复制文件路径","目标位置") 文件内容的复制 from shutil import copyfile copyfile(来源文件,目标文件) 文件的剪切 可用于文件和文件夹 fr…

【Spring MVC】处理器映射器:AbstractHandlerMethodMapping源码分析

目录 一、继承体系 二、HandlerMapping 三、AbstractHandlerMapping 四、AbstractHandlerMethodMapping 4.1 成员属性 4.1.1 MappingRegistry内部类 4.2 AbstractHandlerMethodMapping的初始化 4.3 getHandlerInternal()方法:根据当前的请求url,…
推荐文章