【Git】从零开始使用git --- git 的基本使用

从零开始使用git
- 了解 Git
- git创建本地仓库
- 初步理解git结构
- 版本回退
了解 Git
开发场景中,文档可能会经历若干版本的迭代。假如我们不进行版本管理,那么出现问题后想要回溯版本,就会
变得异常困难!
Git就是用来解决这个问题的:
- git可以管理电脑上任意格式的文档。
- git可以做到版本控制,可以记录文件内容变化,以便将来查阅特定版本修订情况的系统。
Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。(不得不说大佬就大佬,真滴厉害!)
git创建本地仓库
当我们想要将一个文件夹做为本地仓库时,可以使用:
git init
进行快速的初始化,当我们执行后会出现日志:
此时,我们的本地仓库就建立好了!
当我们创建好本地仓库时,该来路径下会产生一个文件.git:
我们使用tree来看一下这个文件的文件结构:

后面我们会一一讲解。
本地仓库创建好之后,还需要进行一些配置。我们必须配置name email,那么如何进行配置呢?
git config user.name "jlx"
git config user.email "123123@qq.com"
我们可以通过git config -l 查看一下配置项:

想要删除配置项可以使用
git config --unset user.name
git config --unset user.email
接下来我们来看一个选项--global:
git config --global user.name "jlx"
git config --global user.email "123123@qq.com"
在一台主机下,我们可以配置多个本地仓库,每个仓库都会有对应的配置项。--global就是声明一个全局的配置项,所有的本地仓库都可以进行访问。对应的删除:
git config --global --unset user.name
git config --global --unset user.email
初步理解git结构
我们现在我们的本地仓库创建一个文件:

这样创建了一个文件之后,我们并没有真正的对readme进行了管理,这只是创建了一个文件!
注意:千万不能对.git文件进行手动修改!必须通过指令来进行管理,否则会破坏git仓库
所以readme这个区域也被称之为工作区。工作区就是我们进行编写代码,修改文件的地方:

只有我们使用git add filename之后,才会进入git仓库进行管理。使用add之后会将文件放入stage(暂存区)。当我们进行对文件进行修改之后,使用git add filename指令后,会将文件的新增/修改/删除信息放入暂存区(这里储存一个索引)。之后再通过git commit -m""将暂存区的文件放入版本库中。
在版本库中还存在一个对象库objects,当我们进行git add filename之后,修改的工作区内容会写入对象库的一个新的git对象中。

我们创建三个文件来看:

来看git log命令的效果:

此时就能看到历史commit的数据,这个提交id是哈希算法生成的一个大数,不会重复。
接下来我们再来了解一下git结构中的HEAD:

其指向了一个路径refs/heads/master。我们打印一下这个内容:

这里存放的就是最新一次commit提交的信息。这样的序列号都会有对应的对象:

这个序列号组成是:2位文件夹名称 + 对象序列号。我们来看这个对象到底是怎样的:

这里看到还有一个tree对象,我们看看这是什么:

这里是之前我们提交过的文件,都有对应的对象。
如果我们想要查看暂存区中是否出现了新内容,可以使用git statu查看是否工作区是否有被修改的文件。并且还可以通过git diff 可以查看工作区和仓库中的差异:

版本回退
接下来我们来了解git的核心功能:版本回退,本质是回退版本库的内容。
git存在三个部分:工作区,暂存区,版本库,都可以进行回退选项:
--soft: 只回退版本库内容--mixed:对暂存区和版本库进行版本回退(默认选项)--hard:对暂存区和版本库以及工作区都进行版本回退(慎用 ,会导致工作区新内容丢失,直接丢失好几天写的代码可就坏了)
那么如何进行选择回退到哪一个版本呢,我们可以打印出日志来看:

此时可以看到每次的commit信息了,所以写出完善的commit信息是非常重要的!!!然后就可以通过序列号进行回退了

成功回退!当然如果后悔了,也可再次进行版本回退!只要我们的版本序列化存在就可以进行回退!

如果你不小心退出了,再次进入后发现之前的log信息不见了,不用担忧,可以通过git reflog进行查看,并进行版本选择。如果如果序列号真的没有了,那么也就没有办法进行版本回退了!!! 必须要多加注意哦!!!
版本库版本回退的本质是master指向的改变!所以速度很快!
相关文章:
【Git】从零开始使用git --- git 的基本使用
哪怕是野火焚烧,哪怕是冰霜覆盖, 依然是志向不改,依然是信念不衰。 --- 《悟空传》--- 从零开始使用git 了解 Gitgit创建本地仓库初步理解git结构版本回退 了解 Git 开发场景中,文档可能会经历若干版本的迭代。假如我们不进行…...
spring mvc 中 RestTemplate 全面详解及示例
RestTemplate 全面详解及示例 1. RestTemplate 简介 定义:Spring 提供的同步 HTTP 客户端,支持多种 HTTP 方法(GET/POST/PUT/DELETE 等),用于调用 RESTful API。核心特性: 支持请求头、请求体、URI 参数的…...
智能指针之设计模式1
本文探讨一下智能指针和GOF设计模式的关系,如果按照设计模式的背后思想来分析,可以发现围绕智能指针的设计和实现有设计模式的一些思想体现。当然,它们也不是严格意义上面向对象的设计模式,毕竟它们没有那么分明的类层次体系&…...
Android 中支持旧版 API 的方法(API 30)
Android 中最新依赖库的版本支持 API 31 及以上版本,若要支持 API30,则对应的依赖库的版本就需要使用旧版本。 可通过修改模块级 build.gradle 文件来进行适配。 1、android 标签的 targetSdk 和 compileSdk 版本号 根据实际目标设备的 android 版本来…...
[特殊字符] Hyperlane:Rust 高性能 HTTP 服务器库,开启 Web 服务新纪元!
🚀 Hyperlane:Rust 高性能 HTTP 服务器库,开启 Web 服务新纪元! 🌟 什么是 Hyperlane? Hyperlane 是一个基于 Rust 语言开发的轻量级、高性能 HTTP 服务器库,专为简化网络服务开发而设计。它支…...
【深拷贝、浅拷贝】golang函数参数传递,变量复制后,操作变量参数,是否影响原有数据?全面解析
Golang中深拷贝与浅拷贝的详细解析,以及变量复制、函数参数传递等场景下对新旧变量影响的总结: 一拷贝与浅拷贝的核心区别 1. 浅拷贝(Shallow Copy) • 定义:仅复制数据的顶层结构,对引用类型字段&#x…...
RIP V2路由协议配置实验CISCO
1.RIP V2简介: RIP V2(Routing Information Protocol Version 2)是 RIP 路由协议的第二版,属于距离矢量路由协议,主要用于中小型网络环境。相较于 RIP V1,RIP V2 在功能和性能上进行了多项改进,…...
《LNMP架构+Nextcloud私有云超维部署:量子级安全与跨域穿透实战》
项目实战-使用LNMP搭建私有云存储 准备工作 恢复快照,关闭安全软件 [rootserver ~]# setenforce 0[rootserver ~]# systemctl stop firewalld搭建LNMP环境 [rootserver ~]# yum install nginx mariadb-server php* -y# 并开启nginx服务并设置开机自启 [r…...
STM32 HAL库 OLED驱动实现
一、概述 1.1 OLED 显示屏简介 OLED(Organic Light - Emitting Diode)即有机发光二极管,与传统的 LCD 显示屏相比,OLED 具有自发光、视角广、响应速度快、对比度高、功耗低等优点。在嵌入式系统中,OLED 显示屏常被用…...
Excel通过VBA脚本去除重复数据行并保存
一、方法1:使用字典动态去重并保存 适用场景:需要灵活控制去重逻辑(如保留最后一次出现的重复项)时 Sub 动态去重保存到新表()Dim srcSheet As Worksheet, destSheet As WorksheetDim dict As Object, lastRow As Long, i As LongDim key A…...
大模型Prompt提示词越狱相关知识
大模型Prompt提示词越狱相关知识 一、什么是Prompt提示词越狱? 什么是Prompt提示词 Prompt是指你向AI输入的内容,它直接指示AI该做什么任务或生成什么样的输出,简而言之, Prompt就是你与AI之间的“对话内容”,可…...
3DMAX笔记-UV知识点和烘焙步骤
1. 在展UV时,如何点击模型,就能选中所有这个模型的uv 2. 分多张UV时,不同的UV的可以设置为不同的颜色,然后可以通过颜色进行筛选。 3. 烘焙步骤 摆放完UV后,要另存为一份文件,留作备份 将模型部件全部分成…...
【新人系列】Golang 入门(十三):结构体 - 下
✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12898955.html 📣 专栏定位:为 0 基础刚入门 Golang 的小伙伴提供详细的讲解,也欢迎大佬们…...
Spring Boot 自定义商标(Logo)的完整示例及配置说明( banner.txt 文件和配置文件属性信息)
Spring Boot 自定义商标(Logo)的完整示例及配置说明 1. Spring Boot 商标(Banner)功能概述 Spring Boot 在启动时会显示一个 ASCII 艺术的商标 LOGO(默认为 Spring 的标志)。开发者可通过以下方式自定义&a…...
Ubuntu虚拟机Linux系统入门
目录 一、安装 Ubuntu Linux 20.04系统 1.1 安装前准备工作 1.1.1 镜像下载 1.1.2 创建新的虚拟机 二、编译内核源码 2.1 下载源码 2.2 指定编译工具 2.3 将根文件系统放到源码根目录 2.4 配置生成.config 2.5 编译 三、安装aarch64交叉编译工具 四、安装QEMU 五、…...
【蓝桥杯】2025省赛PythonB组复盘
前言 昨天蓝桥杯python省赛B组比完,今天在洛谷上估了下分,省一没有意外的话应该是稳了。这篇博文是对省赛试题的复盘,所给代码是省赛提交的代码。PB省赛洛谷题单 试题 A: 攻击次数 思路 这题目前有歧义,一个回合到底是只有一个…...
深入解析区块链技术:原理、应用与未来展望
1 区块链技术原理 1.1 基本概念 区块链本质上是一个分布式账本,它由一系列按照时间顺序排列的数据块组成,每个数据块包含了一定时间内的交易信息。这些数据块通过密码学技术相互链接,形成一个不可篡改的链条。其核心特点包括去中心化、不可篡…...
Linux进程替换与自定义shell详解
引言 进程替换和shell编程是Linux系统中极其重要的概念,它们不仅是系统内部工作的基础机制,也是系统管理员和开发者必备的技能。本文将深入探讨Linux中的进程替换原理、系统调用实现以及如何创建自定义shell,帮助你全面理解这些重要概念并掌…...
【数据结构_4下篇】链表
一、链表的概念 链表,不要求在连续的内存空间,链表是一个离散的结构。 链表的元素和元素之间,内存是不连续的,而且这些元素的空间之间也没有什么规律: 1.顺序上没有规律 2.内存空间上也没有规律 *如何知道链表中包…...
Mybatis的简单介绍
文章目录 MyBatis 简介 1. MyBatis 核心特点2. MyBatis 核心组件3. MyBatis 基本使用示例(1) 依赖引入(Maven)(2) 定义 Mapper 接口(3) 定义实体类(4) 在 Service 层调用 4. MyBatis 与 JPA/Hibernate 对比 MyBatis 简介 MyBatis 是一款优秀的 持久层框…...
JavaScript 性能优化实战:深入探讨 JavaScript 性能瓶颈,分享优化技巧与最佳实践
在当今 Web 应用日益复杂的时代,JavaScript 性能对于用户体验起着决定性作用。缓慢的脚本执行会导致页面加载延迟、交互卡顿,严重影响用户留存率。本文将深入剖析 JavaScript 性能瓶颈,并分享一系列实用的优化技巧与最佳实践,助你…...
1g内存电脑sqlite能支持多少并发
1. SQLite的并发机制 写操作:默认使用串行锁,同一时间仅允许一个写操作(其他写/读需等待)。读操作:支持多并发读取,但受内存、磁盘I/O和配置限制。 2. 关键限制因素 (1)内存资源 …...
jetpack之jetpack的概括和其中组件的简单使用
注意⚠:此篇文章由deepseek大力支持!!!(╹ڡ╹ ) 主要是对不知道学什么,对各个组件一头雾水的jetpack新手准备的文章 不知道jetpack学什么,就看这篇文章!! 1. DataBindingÿ…...
音视频 五 看书的笔记 MediaCodec
MediaCodec 用于访问底层媒体编解码器框架,编解码组件。通常与MediaExtractor(解封装,例如Mp4文件分解成 video和audio)、MediaSync、MediaMuxer(封装 例如音视频合成Mp4文件)、MediaCrypto、Image(cameraX 回调的ImageReader对象可以获取到Image帧图像,可转换成YU…...
物联网|无人自助台球厅源码|哪些框架支持多设备连接?
在无人自助台球厅的智能化管理中,物联网(IoT)技术是核心支撑。如何实现不同设备(如智能门锁、环境传感器、支付终端、灯光控制系统等)的高效连接与协同工作,是系统开发的关键挑战。本文将带大家探讨支持多设…...
Python中NumPy的统计运算
在数据分析和科学计算领域,Python凭借其丰富的库生态系统成为首选工具之一,而NumPy作为Python数值计算的核心库,凭借其高效的数组操作和强大的统计运算功能,广泛应用于机器学习、信号处理、统计分析等场景。本文将系统介绍NumPy在…...
uniapp实现H5页面麦克风权限获取与录音功能
1.权限配置 在uni-app开发H5页面时,需要在manifest.json文件中添加录音权限的配置。具体如下: {"h5": {"permissions": {"scope.record": {"desc": "请授权使用录音功能"}}} }这段配置代码是用于向…...
两个树莓派如何通过wifi direct传输视频并显示
这里写自定义目录标题 在两台设备上安装必要软件Wi-Fi Direct接收端IP(自动发现或静态设置)设置摄像头参数显示初始化网络设置 系统架构概述 发送端树莓派:捕获视频(摄像头或视频文件)→ 编码 → 通过Wi-Fi Direct传输…...
ubuntu 系统安装Mysql
安装 mysql sudo apt update sudo apt install mysql-server 启动服务 sudo systemctl start mysql 设置为开机自启 sudo systemctl enable mysql 查看服务状态 (看到类似“active (running)”的状态信息代表成功) sudo systemctl status mysql …...
selenium快速入门
一、操作浏览器 from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By# 设置选项 q1 Options() q1.add_argument("--no-sandbo…...
