[Git][认识Git]详细讲解
目录
- 1.什么是仓库?
- 2.认识工作区、暂存区、版本库
- 3.认识 .git
- 1.index
- 2.HEAD && master
- 3.objects
- 4.总结
1.什么是仓库?
- 仓库:进⾏版本控制的⼀个⽂件⽬录
2.认识工作区、暂存区、版本库
-
工作区:在电脑上写代码或⽂件的⽬录
-
暂存区(
stage
/index
):⼀般存放在.git
目录下的index
文件(.git/index
)- 暂存区有时也叫作索引(
index
)
- 暂存区有时也叫作索引(
-
版本库(仓库):
.git
不算⼯作区,⽽是Git的版本库- 这个版本库⾥⾯的所有⽂件都可以被Git管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
-
⼯作区、暂存区和版本库之间的关系
- 在创建Git版本库时,Git会⾃动创建⼀个唯⼀的
master
分⽀,以及指向master
的⼀个指针叫HEAD
- 当对⼯作区修改(新增、修改、删除)的⽂件执⾏
git add
命令时,暂存区⽬录树的⽂件索引会被更新 - 当执⾏提交操作
git commit
时,master分⽀会做相应的更新- 可以简单理解为暂存区的⽬录树才会被真正写到版本库中
- 可以简单理解为暂存区的⽬录树才会被真正写到版本库中
- 在创建Git版本库时,Git会⾃动创建⼀个唯⼀的
-
综上:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件,必须要通过使⽤
git add
和git commit
命令才能将⽂件添加到仓库中进⾏管理 -
是谁在维护版本呢?
objects
对象库在维护,里面存放了很多git对象- 修改的工作区内容会写入对象库的一个新的git对象中
- 每一个git对象,都描述了此次
git add
后所修改的内容
3.认识 .git
1.index
index
:暂存区,git add
后的内容都是添加到这里的
2.HEAD && master
HEAD
:默认指向master
分支的指针$ cat .git/HEAD ref: refs/heads/master
- 默认的
master
分支,里面保存着最新的commit id
$ cat .git/refs/heads/master d74fd33ce217d9d6aefab18c84a3c4fb542d293e
3.objects
objects
为Git的对象库,⾥⾯包含了创建的各种版本的库对象及内容- 当执⾏
git add
时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,位于".git/object
s"⽬录下objects ├── 78 │ └── c38e74ed7bad28f712b4b214fcc1f1dc2814b6 ├── 7a │ └── 535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 ├── 84 │ └── ef513c15700a4fc435dd6e6ac284a49d7901ac ├── 8a │ └── e26cc86d8c9213c406383181dad60050e15df6 ├── 99 │ └── a6aad83baf0a7fdb6cf394f11ccde7845bcb1d ├── d7 │ └── 4fd33ce217d9d6aefab18c84a3c4fb542d293e ├── info └── pack
- 查找
object
时要将commit id
分成2部分,前2位是⽂件夹名称,后38位是⽂件名称 - 查看版本库对象的内容:
git cat-file
$ git cat-file -p d74fd33ce217d9d6aefab18c84a3c4fb542d293e tree 84ef513c15700a4fc435dd6e6ac284a49d7901ac parent 7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 author DieSnowK <23336666@qq.com> 1721717265 +0800 committer DieSnowK <23336666@qq.com> 1721717265 +0800666.txt
- 其中
tree 84ef513c15700a4fc435dd6e6ac284a49d7901ac
$ git cat-file -p 84ef513c15700a4fc435dd6e6ac284a49d7901ac 100644 blob 99a6aad83baf0a7fdb6cf394f11ccde7845bcb1d 233.txt 100644 blob 78c38e74ed7bad28f712b4b214fcc1f1dc2814b6 666.txt
- 任意查看其中的一个文件,发现是对每个文件做的修改,被Git记录了下来
$ git cat-file -p 99a6aad83baf0a7fdb6cf394f11ccde7845bcb1d SnowK
4.总结
index
:暂存区,git add
后会更新该内容HEAD
:默认指向master
分⽀的⼀个指针refs/heads/master
:⽂件⾥保存当前master
分⽀的最新commit id
objects
:包含了创建的各种版本库对象及内容- 可以简单理解为存放了Git维护的所有修改
相关文章:

[Git][认识Git]详细讲解
目录 1.什么是仓库?2.认识工作区、暂存区、版本库3.认识 .git1.index2.HEAD && master3.objects4.总结 1.什么是仓库? 仓库:进⾏版本控制的⼀个⽂件⽬录 2.认识工作区、暂存区、版本库 工作区:在电脑上写代码或⽂件的⽬录…...
Win11系统Docker部署Blazor程序
1. 开发环境 Windows 11 家庭版,默认支持WSL2 2. Docker安装 安装Docker Desktop需要启用Win11的Linux子系统和虚拟机。以管理员身份运行命令行程序,执行如下命令: 启用适用于 Linux 的 Windows 子系统 dism.exe /online /enable-featur…...

C语言自定义类型结构体与位段超详解
文章目录 1. 结构体类型的声明1. 1 结构体声明1. 2 结构体变量的创建和初始化1. 3 结构体的特殊声明1. 3 结构体的自引用 2. 结构体内存对齐2. 1 对齐规则2. 2 为什么存在内存对齐2. 3 修改默认对齐数 3. 结构体传参4. 结构体实现位段4. 1 什么是位段4. 2 位段成员的内存分配4.…...
JS中关于预编译的【关键知识点】总结
在JavaScript中,预编译(hoisting)是指在代码执行之前,JavaScript引擎会首先对代码进行扫描,将所有的变量声明和函数声明提升到代码的最顶部。这一过程使得我们在代码中可以在声明之前使用变量和函数。理解预编译对于深…...
Elasticsearch 映射(mapping)
概念 在 Elasticsearch 中,映射(Mapping)定义了索引中字段的类型和属性。它是索引数据结构的基础,类似于传统数据库中的表结构定义。映射不仅定义了字段的类型(如 text、keyword、integer 等)…...

开放式耳机更适合运动的时候使用?开放式耳机推荐指南
开放式耳机确实非常适合运动时使用,原因主要有以下几点。 首先,保持对外界的感知是很重要的一点。在运动的时候,我们需要听到周围的环境声音,比如车辆的行驶声、行人的呼喊等,以便及时做出反应,保证自身安全…...

食堂窗口自助点餐小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,店铺信息管理,菜品分类管理,菜品信息管理,订单管理,系统管理 微信端账号功能包括:系统首页&#…...
请说出路由传参和获取参数的三种方式
在Vue.js中使用Vue Router进行路由管理时,传递和获取参数是常见的需求。这里介绍三种主要的路由传参和获取参数的方式: 1. 通过URL的查询参数(Query Parameters) 传递参数: 当你需要传递一些非敏感数据(…...

精准防控,高效管理:AI智能分析网关V4区域未停留检测算法的介绍及应用
一、区域未停留AI检测算法概述 随着人工智能和计算机视觉技术的飞速发展,区域未停留AI检测算法作为一种重要的视频分析技术,逐渐在各个领域得到广泛应用。该算法通过高效处理视频流数据,能够实时分析并判断目标对象是否在预设区域内有足够的…...

html+css練習:iconfont使用
1.網址地址:https://www.iconfont.cn/search/index 2.註冊登錄,將需要的圖標添加到購物車 3.下載代碼 4.下載后的代碼有一個html頁面,裡面有詳細的使用方式...

算法导论 总结索引 | 第五部分 第二十一章:用于不相交集合的数据结构
一些应用涉及 将n个不同的元素分成一组不相交的集合。寻找包含给定元素的唯一集合 和 合并两个集合 1、不相交集合的操作 1、一个不相交集合 数据结构 维持了 一个不相交动态集的集合 S {S_1, S_2,…, S_n}。用一个代表 来标识每个集合,它是这个集合的某个成员。…...

【单例设计模式】揭秘单例模式:从原理到实战的全方位解析(开发者必读)
文章目录 深入理解单例设计模式:原理、实现与最佳实践引言第一部分:设计模式简介第二部分:单例模式定义第三部分:单例模式的优点和缺点第四部分:单例模式的实现方式懒汉式非线程安全的实现线程安全的实现(双…...

VTK8.2.0编译(Qt 5.14.2+VS2017)
VTK8.2.0编译(Qt 5.14.2VS2017) 关于Qt和MSVC的安装,可以参考文章(QtMSVC2017)。 本篇VTK在QtMSVC的配置下的编译。VTK 以8.2.0为例。 一、环境变量的配置 我们打开电脑的环境变量,可以看到没有Qt相关的…...

武汉流星汇聚:亚马逊跨境电商龙头,市场份额稳固,服务品质卓越
在全球跨境电商的版图上,亚马逊无疑是一颗璀璨的明星,以其庞大的市场规模、卓越的用户体验和强大的品牌影响力,稳居行业龙头地位。即便在诸多新兴跨境平台竞相崛起的背景下,亚马逊依然以其独特的优势,保持着难以撼动的…...

我出一道面试题,看看你能拿 3k 还是 30k!
大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中…...
opecv c++计算图像的曲率
公式 κ z x x ⋅ z y 2 − 2 ⋅ z x ⋅ z y ⋅ z x y z y y ⋅ z x 2 ( z x 2 z y 2 1 ) 3 / 2 \kappa \frac{z_{xx} \cdot z_y^2 - 2 \cdot z_x \cdot z_y \cdot z_{xy} z_{yy} \cdot z_x^2}{(z_x^2 z_y^2 1)^{3/2}}\newline κ(zx2zy21)3/2zxx⋅zy2−2⋅zx…...

鸿蒙 IM 即时通讯开发实践,融云 IM HarmonyOS NEXT 版
融云完成针对“纯血鸿蒙”操作系统的 SDK 研发,HarmonyOS NEXT 版融云 IM SDK 已上线,开发者可在“鸿蒙生态伙伴 SDK 市场”查询使用。 发挥 20 年通信行业技术积累和领创品牌效应,融云为社交、娱乐、游戏、电商、出行、医疗等各行业提供专业…...

【全国大学生电子设计竞赛】2022年D题
🥰🥰全国大学生电子设计大赛学习资料专栏已开启,限时免费,速速收藏~...

【优秀python案例】基于python爬虫的深圳房价数据分析与可视化实现
现如今,房价问题一直处于风口浪尖,房价的上涨抑或下跌都牵动着整个社会的利益,即便是政府出台各种政策方针也只能是暂时抑制楼市的涨势,对于需要买房的人来说,除了关注这些变化和政策外,还有一个非常头疼的…...

vscode安装与配置本地c/c++编译调试环境
目录 (1)安装vscode和常用插件 1.下载安装vscode 2.安装常用插件 (2)本地安装和配置编译器 1.安装编译器 2.vscode配置编译器 第1种:全局配置 第2种:为当前项目个性化配置 (3ÿ…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...