git基本操作(配图超详细讲解)
个人主页:Lei宝啊
愿所有美好如期而遇
目录
创建git本地仓库
配置仓库
认识工作区,暂存区,版本库
修改文件
版本回退
撤销修改
删除文件
创建git本地仓库
要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。
首先创建一个目录,我们叫做Git
接着进入该目录,使用git init命令创建一个git本地仓库
ls -al 我们可以看到.git目录,这就是我们的本地仓库了

.git里的文件不要手动修改,否则仓库就废了。

配置仓库
当安装好Git后⾸先要做的事情是设置你的⽤户名和e-mail地址,不要瞎给,给和你gitee相同的用户名和e-mail。
查看仓库配置命令
git config -l
我这里是配置过的。

配置命令
git config user.name "your name" (当前仓库进行配置)
git config --global user.name "your name" (本台机器上所有仓库进行配置)
git config user.email "email@example.com"
git config --global user.email "email@example.com"
删除对应配置命令
git config --unset user.name
git config --global --unset user.name
git config --unset user.email
git config --global --unset user.name

发现用户名的配置没有被删除,但是加了global就可以了,是因为我配置的时候就加了global,所以在配置和删除时一定要对应。
认识工作区,暂存区,版本库

工作区:我们远程推送代码的地方
暂存区:.git下的index文件
版本库:就是.git,这个版本库里所有文件都可以被他管理起来
更深入的理解我们稍后会说到。
git add .将文件添加到暂存区
git commit -m "" 将文件提交到本地仓库

我们再来添加几个文件就可以开始我们的理解了。

我们tree .git

接下来顺着我的思路一步步看下去。

这一串字符叫做commit id,而且我们看的时候需要分成两部分,前两个数字是文件夹的名字,后面是文件的名字,而且我们一般不能直接看到里面有什么,该类文件是通过安全哈希算法加密过的,我们可以通过git cat-file 查看

这个是我们最新提交的。

这是我们提交过的,也就是tree后的commit id

这是最新提交的上一条提交,也就是parent后的commit id,由于这条提交是第一条提交,所以没有parent的commit id

查看Readme文件的内容 
此外,git log可以查看历史提交记录

为了使打印结果更加美观,我们可以这样

修改文件
我们提到的修改:新增,修改,删除
git跟踪管理的不是文件,而是工作区内容的修改,这些修改就存放在对象区。

我们再来对文件进行修改,这是我们修改的代码量比较少,所以我们还是可以区分哪些是修改的,而且找的到,如果我们的代码写了几百行,这时候增删我们再查看就找不全哪些是修改过的了,所以在这里我们认识一个指令
git status 查看上次提交之后是否对文件有再次修改

没有需要提交的内容,这是因为我们没有add修改过的Readme文件,但是下面是可以看到我们对Readme文件是有修改的。
但是这样还不够,我们看不到具体修改了什么内容,这里还有一个指令
git diff 文件名 这个指令用来显示暂存区和工作区的差别

我们再来试一次

这一次我们删除了工作区的一个文件,(Read文件未添加和提交,所以我们删除也不会显示),并且在Readme文件中添加了些内容,通过git status可以查看上次提交后是否有修改,这次我们有删除和修改。
新增了两行。
我们能产生对比效果,是因为已经经过了add,这里是在添加这两行前对Readme文件进行了add,因为git diff是对暂存区和工作区的一个对比。
版本回退
之前我们提到过git可以管理历史文件的版本,如果有天你想找回之前版本的文件,这时候,版本回退就很必要了。

我们可以看到我们提交的文件历史记录,现在我们将后来再次修改的文件再次做提交。

现在我们想将文件退回到第二个版本,我们当前是最新版本。
git reset --soft commit id
git reset --mixed commit id
git reset --hard commit id
或者
git reset --soft HEAD^, HEAD^表示上个版本,HEAD^^表示上上个版本。
……
也可以
git reset --soft HEAD~1 表示退回第几个版本,0就代表当前的最新版本。
……
三个选项的区别是什么呢?
首先我们要明确的是上个版本与当前版本差的是一句try again。


而系统默认的回退方式是--mixed,我们也要慎重使用--hard,否则工作区辛苦写了几天的代码,一行指令就没了,无法找回。
我们再回退至刚才的最新版本

我们能够自由回退到任意版本,就是因为我们能够找到commit id,如果说你不小心clear,找不到commit id怎么办,没关系,还有办法
git reflog 该命令记录了本地的每一条命令

但作者还想说的是,随着提交记录的变多,有些记录早就找不到了,到那时候,就真找不回来了。
值得说明的是,git回退版本的速度非常快,原因我们画图来解释:

也就是说每个版本都有单独存储,需要回退到哪个版本就使HEAD指向哪个版本。
撤销修改
版本回退本质是回退版本库,但是撤销修改本质是撤销工作区内容的修改。
我们再对Readme文件做一些修改

我们发现之前的内容没了,如何撤销修改?
未add
git checkout -- filename

已经add,但未commit
这时候就要重新提起我们的reset了,他有回退到当前版本的功能,所谓当前版本,就是以版本库为参照,回退到版本库。
我们画个图:

我们要回退到版本库那个样子,怎么做呢?
有两个办法 ,使用--hard全部回退到当前版本,一步到位

第二个办法,先--mixed回退暂存区至当前版本,然后checkout --撤销修改

已经commit
还是有两种办法,第一种就是reset指定上一次的版本进行回退,直接--hard commit id
第二种方式就是--hard HEAD^回退至上一个版本。

删除文件
删除文件也算是一种修改,我们rm file删除文件后,正常添加,提交就可以了。
还有简单一步的:

省去了提交这一步骤。
相关文章:
git基本操作(配图超详细讲解)
个人主页:Lei宝啊 愿所有美好如期而遇 目录 创建git本地仓库 配置仓库 认识工作区,暂存区,版本库 修改文件 版本回退 撤销修改 删除文件 创建git本地仓库 要提前说的是,仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂…...
【网络通信】浅析UDP与TCP协议的奥秘
在现代互联网中,UDP(用户数据报协议)和TCP(传输控制协议)是两种最常用的传输协议,它们被广泛应用于网络数据传输。尽管这两种协议都可以用来在网络上传输数据,但它们在设计目标、特点和适用场景…...
C#核心笔记——(二)C#语言基础
一、C#程序 1.1 基础程序 using System; //引入命名空间namespace CsharpTest //将以下类定义在CsharpTest命名空间中 {internal class TestProgram //定义TestProgram类{public void Test() { }//定义Test方法} }方法是C#中的诸多种类的函数之一。另一种函数*,还…...
C++ 删除无头链上所有指定值为x的节点。
C 删除无头链上所有指定值为x的节点。 #include<stdio.h> #include<ctype.h> #include<stdlib.h> typedef struct app {int data;struct app* next; }APP; int main() {int n;int node;int x;while (scanf("%d", &n) ! EOF){APP* head NULL, …...
linux基本指令以及热键
基本指令 ♥clear ♥whoami ♥who ♥pwd ♥ls指令(重点) ls -a: ls -l ♥mkdir ♥cd指令 ♥touch指令 ♥stat指令 ♥rmdir指令 && rm 指令 ♥man指令 ♥nano指令 ♥cp指令 ♥mv指令 ♥cat指令 🗡输出/输出重定向 …...
Rocketmq消费消息时不丢失不重复
消息消费不丢失 手动ACK 在消费者端,需要确保在消息拉取并消费成功之后再给Broker返回ACK,就可以保证消息不丢失了,如果这个过程中Broker一直没收到ACK,那么就可以重试。所以,在消费者的代码中,一定要在业…...
RedisInsight——redis的桌面UI工具使用实践
下载 官网下载安装。下载地址在这里 填个邮箱地址就可以下载了。 安装使用。 安装成功后开始使用。 1. 你可以add一个地址。或者登录redis cloud 去auto-discover 2 . 新增你的redis库地址。注意index的取值 3。现在可以登录到redis了。看看结果 这是现在 在服务器上执行…...
JVM对象创建与内存分配
对象的创建 对象创建的主要流程: 类加载推荐博客:JVM类加载机制详解 类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析…...
央国企数字化转型难在哪?为什么要数字化转型?
科技在发展,技术在升级,全球信息化、数字化的步伐在加快,企业想要在未来的发展中抓住机会,更好地发展壮大,就需要加快企业数字化转型的速度,才能立足于信息化、数字化时代,央国企作为企业中的一…...
第7天:信息打点-资产泄漏amp;CMS识别amp;Git监控amp;SVNamp;DS_Storeamp;备份
第7天:信息打点-资产泄漏&CMS识别&Git监控&SVN&DS_Store&备份 知识点: 一、cms指纹识别获取方式 网上开源的程序,得到名字就可以搜索直接获取到源码。 cms在线识别: CMS识别:https://www.yun…...
不可思议,红警居然开源了!
红警,准确的说应该叫“红色警戒”,是大部分 80/90 后记忆里跟游戏二字关系最深的情节。 相信每一名 80/90 后,都有一段难忘的红警岁月,甚至可以说很多人的青春,就叫红警! 说到红色警戒游戏,估计应该是很多…...
yolo系列模型训练数据集全流程制作方法(附数据增强代码)
yolo系列的模型在目标检测领域里面受众非常广,也十分流行,但是在使用yolo进行目标检测训练的时候,往往要将VOC格式的数据集转化为yolo专属的数据集,而yolo的训练数据集制作方法呢,最常见的也是有两种,下面我…...
4、FFmpeg命令行操作7
转封装(1) 保持编码格式: ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts ffmpeg -i test.mp4 -codec copy test_copy2.ts 改变编码格式: ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv …...
算法进阶——链表中环的入口节点
题目 给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。 数据范围:1<结点值<10000 要求:空间复杂度O(1),时间复杂度O(n) 例如,输入{1,2},{3,4,5…...
无线WiFi安全渗透与攻防(N.1)WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速
WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速 WPA渗透-pyrit:batch-table加速attack_db模块加速_“attack_db”模块加速1.渗透WIFI1.导入密码字典2.导入essid,破解完成记得删除3.批处理数据库,速度比较慢,耐心等待4.batch-table(批处理数据库)加…...
YOLOV8部署Android Studio安卓平台NCNN
下载Android Studio,配置安卓开发环境,这个过程比较漫长。 安装cmake,注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本,我的是红米K30Pro,安卓12。 使用腾讯开源的ncnn,这是一个为手机端极…...
【算法萌新闯力扣】:旋转字符串
力扣热题:796.旋转字符串 开篇 今天下午刷了6道力扣算法题,选了一道有多种解法的题目与大家分享。 题目链接:796.旋转字符串 题目描述 代码思路 完全按照题目的要求,利用StringBuffer中的方法对字符串进行旋转,寻找相同的一项 …...
可逆矩阵的性质
如果矩阵A可逆,那么它的逆矩阵也可逆,并且如果矩阵A可逆,假设是一个不为0的数,那么也可逆,并且如果矩阵A和都可逆,而且它们的阶数也相同,那么它们的乘积也是可逆的,并且如果矩阵A可逆…...
HIT 模式识别 手写汉字分类 Python实现
训练集数据 TrainSamples-400.csv,含 100 个不同汉字,每个汉字 400 个实例,每个实例均为 64*64 的二值图像; 训练集标注TrainSamples-400.csv,为 40000 个 0 到 99 间的整数,表示训练集中每个实例所属汉字类…...
GPT-4V-Act :一个多模态AI助手,能够像人类一样模拟通过鼠标和键盘进行网页浏览。
内容来源:xiaohuggg GPT-4V-Act :一个多模态AI助手,能够像人类一样模拟通过鼠标和键盘进行网页浏览。 它可以模拟人类浏览网页时的行为,如点击链接、填写表单、滚动页面等。 它通过视觉理解技术识别网页上的元素,就像…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
