5、Git之版本号

news/2025/1/22 17:46:23/文章来源:https://www.cnblogs.com/Javaer1995/p/17972714

5.1、概述

每一次提交,Git 都会生成相关的版本号;每个版本号由 40 位 16 进制的数字组成。

这 40 位 16 进制的数字,是根据提交的内容,通过 SHA-1 算法计算出来的。

版本号具体还分为两部分,前 2 位是目录名,后 38 位是文件名。

5.2、文件操作

5.2.1、初始化本地库

image

如上图所示,刚创建的 Git 本地仓库没有提交信息,也没有版本号。

5.2.2、新增文件并提交

image

如上图所示,新增文件并提交后,通过 git reflog 命令可以查到对应的(精简)提交版本号:7896eb8

注意:本文使用精简的版本号演示,需要查看完整的版本号,请参考3.9.2节

5.2.3、根据版本号查找第一次提交的文件

image

因为版本号的前 2 位是目录名,后 38 位是文件名;所以可以快速定位出文件所在的位置。

image

如上图所示,直接打开文件时,内容是一堆乱码。

image

git cat-file -p 版本号

如上图所示,使用命令行指令才能读取版本号对应的文件内容。

可以看到,该文件内容并没有提交的文件的内容信息,但有另一个版本号。

image

如上图所示,读取上文发现的新版本号,还是没有提交的文件的内容信息,但又有新的版本号,而且对应提交的文件的名称。

image

如上图所示,读取上文发现的新版本号,可以看到了提交的文件的内容信息。

5.2.4、第一次提交的版本号图解

image

如上图所示,提交日志中的版本号所对应的文件,包含的内容是状态信息的版本号;

状态信息的版本号所对应的文件,包含的内容是本次提交版本的全部文件的版本号。

5.2.5、修改文件并提交

image

如上图所示,修改文件并提交后,通过 git reflog 命令可以查到对应的(精简)提交版本号:774e05f

5.2.6、根据版本号查找第二次提交的文件

image

如上图所示,根据第二次提交的版本号,可以查出本次提交的状态信息的版本号(tree)和上一次(即第一次)提交的版本号(parent)。

image

如上图所示,根据状态信息的版本号,可以查出本次提交版本的全部文件的版本号。

注意:修改后的a.txt文件的版本号已经变了,没有修改的b.txt文件的版本号和原来的一样。

image

如上图所示,修改后的a.txt文件的内容已经从“111”变为“333”了,没有修改的b.txt文件的内容还是原来的“222”。

5.2.7、第二次提交的版本号图解

image

如上图所示,所谓的修改文件,实质是新增了一个版本号不同但名称相同的文件,然后再新增一个状态版本用来记录新的文件版本号列表。

实际上,原来的文件还存在,这也是为什么能实现版本回退(穿梭)的原因。

5.2.8、删除文件并提交

image

image

如上图所示,删除文件并提交后,通过 git reflog 命令可以查到对应的(精简)提交版本号:a140418

5.2.9、根据版本号查找第三次提交的文件

image

如上图所示,根据第三次提交的版本号,可以查出本次提交的状态信息的版本号(tree)和上一次(即第二次)提交的版本号(parent)。

image

如上图所示,根据状态信息的版本号,可以查出本次提交版本的全部文件的版本号。

注意:已删除的b.txt文件的版本号已经没了,没删除的a.txt文件的版本号还在。

image

5.2.10、第三次提交的版本号图解

image

如上图所示,所谓的删除文件,实质是新增一个状态版本用来记录新的文件版本号列表。

实际上,原来的文件还存在,这也是为什么能实现版本回退(穿梭)的原因。

5.3、分支操作

5.3.1、HEAD文件

image

HEAD文件中,记录了当前分支版本文件(本例为 master 分支)的路径。

5.3.2、master分支版本文件

image

master分支版本文件中,记录了该分支的最新提交版本号。

5.3.3、master分支版本图解

image

5.3.4、创建新分支user

image

如上图所示,创建新分支user后,也多了一个分支版本文件user。

image

如上图所示,新创建的user分支版本文件中记录的该分支的最新提交版本号,和master分支版本文件记录的别无二致。

5.3.5、新创建的user分支版本图解

image

5.3.6、切换到user新分支

image

image

如上图所示,切换到user分支后,HEAD文件中记录的当前分支版本文件的路径是user分支版本文件的路径。

5.3.7、切换后的user分支版本图解

image

5.3.8、user分支新增文件并提交

image

image

如上图所示,user分支新增文件并提交后,user分支版本文件中记录的该分支的最新提交版本号,和master分支版本文件记录的不一样了。

5.3.9、新增文件后的user分支版本图解

image

5.3.10、切换回master分支

image

如上图所示,切换回master分支后,HEAD文件中记录的当前分支版本文件的路径是master分支版本文件的路径。

image

此外,master分支的工作目录中,并没有显示在user分支时新增的c.txt文件,说明在user分支的操作不会影响到master分支。

5.3.11、切换回的master分支版本图解

image

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

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

相关文章

linux内存管理(一)物理内存的组织和内存分配

从这一篇开始记录以下我看有关内存管理的内核代码的笔记. 内容很长,很多是我自己的理解,请谨慎观看. 伙伴系统的工作的基础是物理页的组织,组织结构有小到大依次为page->zone->node。下面从源码里看看各个结构是如何组织的。typedef struct pglist_data {struct zone no…

IP和域名 关联关系系统设计

基本说明 IP域名关系库管理包括域名库检索和whois库检索,详情如下。 域名库检索 域名库检索支持以下5项功能: 1.通过过滤器检索 筛选条件包含IP地址、口令、工具名称、可利用的漏洞编号、创建时间; 2.通过关键字检索 在查询框中输入域名库名称的部分关键词,支持模糊查找和精…

PLC通过Profinet转Modbus网关与流量计通讯案例

Profinet 转Modbus网关(XD-MDPN100/300)集成了Modbus和Profinet两种协议,支持Modbus RTU主从站。Profinet 转 Modbus网关自带网络和串口,可提供单路或多路RS485接口。Profinet 转 Modbus网关每个串口可连接32个从站设备,可实现协议转换和接口转换。PLC通过Profinet转Modbus网…

OpenGL:纹理

我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。 艺术家和程…

北京端午游(送小微)

北京端午游 1、奥林匹克森林公园 🅿️交通:🚇地铁8号线森林公园南门站出🚗开车不推荐,游园还得回起点拿车,有点绕不值当🕙时间:半天or全天,根据路线决定🍚餐饮:自带或出国奥村门吃,太多好吃的,推荐日坛涮肉,眉州和满久居奥森北园北门出来有个林奥city!里面…

北京端午游

北京端午游 1、奥林匹克森林公园 🅿️交通:🚇地铁8号线森林公园南门站出🚗开车不推荐,游园还得回起点拿车,有点绕不值当🕙时间:半天or全天,根据路线决定🍚餐饮:自带或出国奥村门吃,太多好吃的,推荐日坛涮肉,眉州和满久居奥森北园北门出来有个林奥city!里面…

快速幂

快速幂大家好,我是Weekoder! 今天的内容是快速幂!(实际上是为了讲矩阵快速幂赶出来的嘻嘻 \[\texttt{Part 1 用处} \]快速幂,顾名思义就是快速地计算出某个数的幂,形如 \(a^n\)。 \[\texttt{Part 2 思想} \]为什么普通的幂运算慢?假设要计算 \(a^n\),则需要拆分成 \(a\…

JavaScript中的async/await

async/await是什么? async 是一个修饰符,async 定义的函数会默认的返回一个Promise对象resolve的值,因此对async函数可以直接进行then操作,返回的值即为then方法的传入函数。await 也是一个修饰符,await 关键字 只能放在 async 函数内部, await关键字的作用 就是获取 Prom…

Mysql 8.4.0 结合 Docker 搭建GTID主从复制,以及传统主从复制

注意:本教程不适用旧版本,Mysql 8.4.0 和 旧版本,主从复制相关命令有所变化,具体区别请看文末参考 软件版本 Docker:26.1.3 Mysql:8.4.0GTID主从复制 1.准备主从两台服务器 2.两台服务器分别创建DockerCompose文件 services:mysql:image: mysql:8.4.0ports:- "3306:…

Vue Router 4与路由管理实战

这篇文章介绍了如何在Vue.js应用中利用Vue Router实现单页面应用的路由管理,包括配置路由、导航守卫的使用、路由懒加载以优化性能以及动态路由的实现方法,旨在提升用户体验和应用加载效率title: Vue Router 4与路由管理实战 date: 2024/6/7 updated: 2024/6/7 excerpt: 这篇…