Git基本操作(2)

news2025/1/17 15:15:46

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.coloradmin.cn/o/1458597.html

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

相关文章

不买服务器也可以将本地服务放到互联网(ngrok内网穿透)

欢迎来到我的博客,代码的世界里,每一行都是一个故事 不买服务器也可以将本地服务放到互联网 前言ngrok基础:穿越网络边界的魔法使用场景:突破网络限制的利器实战 前言 在网络的世界里,有时候你的服务像是困在一座数字…

BTC网络 之 区块裁剪

BTC网络区块总大小 由于BTC网络的区块一直在增长,截至 2024年02月19日,区块总大小已达 550GB 如何节省存储空间 一旦最新交易已经被足够多的区块覆盖,这之前的支付交易就可以被裁剪以节省空间。 单个区块数据 下面我们对 交易0,1&…

AI破局俱乐部,你要了解的都在这里

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

CentOS已安装宝塔的情况下手动安装phpMyAdmin

CentOS 7.9.2009,宝塔7.9.4。 服务器中已有MySQL,可能不是通过宝塔安装的,而是手动安装的。用命令行可以正常进入MySQL查看和管理数据,说明已有的MySQL是正常的。在宝塔中点击数据库提示“未安装本地数据库,已隐藏无法…

VOC赋能人工智能:聆听客户之声,打造智能服务新体验

在当今这个信息爆炸的时代,客户的声音成为了企业宝贵的资源之一。如何有效收集、分析和利用这些声音,成为了企业在激烈的市场竞争中脱颖而出的关键。VOC(客户之声)作为一种先进的管理工具,正在逐渐受到企业的重视&…

【7-1】实验——实体统一和歧义消除

一、使用jieba完成公司名的实体统一 #核心代码:建立main_extract,当输入公司名,返回会被统一的简称 def main_extract(company_name,d_4_delete,stop_word,d_city_province): """ company_name 输入的公司名 stop_word 停…

Linux CentOS stream 9 firewalld

随着互联网行业快速发展,服务器成为用户部署网络业务重要的网络工具,但随之而来的就是更密集的网络攻击,这给网站带来了很大的阻碍。防火墙作为保障网络安全的主要设备,可以很好的抵御网络攻击。 防火墙基本上使用硬件和软件两种…

HTML世界核心

目录 一、基本文档(Basic Documentation) 二、基本标签(Basic Tags) 三、文本格式化(Formatting) 四、链接(Links) 五、图片(Images) 六、样式/区块(Styles/Sections) 七、无序列表(Disorder List) 八、有序列表(Sequence List) 九、定义列表(Definin…

html+css+jquery实现轮播图自动切换、左右切换、点击切换

pc端也好、移动端也好&#xff0c;轮播图很常见&#xff0c;今天用htmlcssjquery实现小米商城轮播图&#xff0c;套UI框架更容易实现 步骤1&#xff1a;把静态轮播图用divcss布局出来&#xff0c;采用盒子模型、相对绝对定位实现 代码如下&#xff1a; <!doctype html>…

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

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

FEP水质取样器操作方便应用环境化工行业

FEP贝勒管&#xff0c;是一种经济型便携式 水质采样器&#xff0c;操作简单&#xff0c;使用方便&#xff0c;它是一种软塑料。 用途&#xff1a; FEP贝勒管适用于各地环境监测站、污水处理厂、水利、水务以及各科研院所&#xff0c;对工业污染源排放口、江、河、湖、海等水样…

一抹中国红占据春节档“C位”,西凤“热辣滚烫”

执笔 | 文 清 编辑 | 古利特 春节期间&#xff0c;西凤酒借“龙年喝西凤&#xff0c;龙凤呈祥”的美好寓意&#xff0c;探班春晚、众星拜年、推出贺岁主题短片《龙年有喜》&#xff0c;极富中国年味的“年夜FUN”第四季也强势回归&#xff1b;线下年夜饭酒店赠饮、直营店赠…

VMware Workstation 17安装教程:安装系统

点击开启虚拟机 安装向导的初始化界面 Keyboard和Language Support分别指的是键盘类型和语言支持&#xff0c;我们首先单击Time & Date按钮&#xff0c;设置系统的时区和时间。在地图上单击中国境内即可显示出上海的当前时间&#xff0c;确认后单击左上角的Done按钮。系统…

【Unity】【VRTK】【VR开发】同时保持高效打包和调试的VRTK项目设置方式

【背景】 开发功能时希望能够快速调试&#xff0c;在Preview和开发编辑器间流畅切换。后期又希望快速打包到目标安卓平台&#xff0c;感受头盔内部的画面和操作效果。麻烦在于&#xff0c;这两者往往不是明确区分的&#xff0c;很可能一会儿只是想快速验证一下某些功能动作&am…

数字化转型导师坚鹏:政府数字化运营三步曲之认知、行动、结果

政府数字化运营三步曲之认知、行动、结果 课程背景&#xff1a; 很多政府都在开展数字化运营工作&#xff0c;目前存在以下问题急需解决&#xff1a; 不清楚政府数字化运营包括哪些关键工作&#xff1f; 不清楚政府数字化运营工作的核心方法论&#xff1f; 不清楚政府数…

BGP 邻居建立

拓扑图 配置 BGP进程号及为AS号 使用环回口建立BGP邻居关系时&#xff0c;需要指定更新源地址 EBGP在使用环回口建立邻居关系时&#xff0c;需配置EBGP多跳&#xff0c;环回口路由可达 EBGP的路由器存在IBGP邻居时&#xff0c;需要配置next-hop-local&#xff0c;保证下一跳…

【小呆的力学笔记】弹塑性力学的初步认知四:简单应力状态下的应力应变关系

文章目录 2. 简单应力状态下的应力应变关系2.1 简单拉伸的应力应变关系2.2 真实应力应变关系2.3 应力-应变关系简化模型 2. 简单应力状态下的应力应变关系 我们在高中就学过&#xff0c;弹簧拉伸力和变形量成比例&#xff0c;对于一般的金属材料&#xff0c;在一定载荷以内这种…

leetcode判断字母异位词

代码 public static boolean isAnagram(String s,String t){char[] x s.toCharArray();char[] y t.toCharArray();Arrays.sort(x);Arrays.sort(y);boolean val Arrays.equals(x, y);return val;} 测试如下 public static void main(String[] args) {String s "anag…

PCIE Retimer

1 Retimers retimer是一种PCIE的扩展设备&#xff0c;用于长距离高效地传输数据&#xff0c;起到一种中继器的作用。PCIe扫盲——ReTimer和ReDriver简介  在EP和RC中间最多允许两级retimers级联&#xff0c;其可以分为纯模拟类&#xff0c;它是一种对物理层协议无关的芯片&…

STM32 USART详细解读(理论知识)

文章目录 前言一、同步传输和异步传输二、UART协议三、UART硬件结构1.波特率&#xff0c;数据位&#xff0c;校验位&#xff0c;停止位设置2.数据发送流程3.数据接收流程4.中断控制 总结 前言 本篇文章来给大家讲解一下STM32中的USART&#xff0c;USART是STM32中非常重要的一个…