5.1、概述

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

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

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

5.2、文件操作

5.2.1、初始化本地库

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

5.2.2、新增文件并提交

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

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

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

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

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

git cat-file -p 版本号

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

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

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

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

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

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

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

5.2.5、修改文件并提交

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

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

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

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

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

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

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

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

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

5.2.8、删除文件并提交

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

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

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

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

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

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

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

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

5.3、分支操作

5.3.1、HEAD文件

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

5.3.2、master分支版本文件

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

5.3.3、master分支版本图解

5.3.4、创建新分支user

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

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

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

5.3.6、切换到user新分支

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

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

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

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

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

5.3.10、切换回master分支

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

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

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

5、Git之版本号的更多相关文章

  1. 在VS项目中通过GIT生成版本号作为编译版本号

    上一篇博客写了如何在 .Net 项目使用 SVN 作为版本控制工具时生成与代码对应的组件版本号.虽然在公司一直使用 SVN ,但我却对 GIT 情有独钟(可能要归功于那段捣鼓 ROM 的时光),但少有 ...

  2. Git(一):Git与版本号控制简单介绍

    Intro 版本号控制系统是什么      版本号控制系统(Version Control System,VCS)能够帮助我们记录和跟踪项目中各文件内容的改动变化.它能够帮我们保存项目的各个版本号.以 ...

  3. eclipse中使用git进行版本号控制

    协作开发的时候没有版本号控制是非常痛苦的事情,使用git能够非常好的完毕这项任务,由于非常多的开源码都在github上公布,因此学会使用git是非常重要的一项技能. 这篇写的是在eclipse下使用的 ...

  4. Xcode中利用git源代码版本号控制

    git是一个版本号控制系统,能够通过命令行来调用,也有专门的桌面软件.这里主要介绍在Xcode中怎样利用git来进行版本号的控制. 一.创建git源 从Xcode5開始引入了使用git的一些新特性.将 ...

  5. git版本号管理工具的上手

    git是一个分布式的版本号管理工具 和其它集中式版本号管理 工具相比具有下面长处: 1.能够在不联网的情况下开发 2.能够方便的建立本地分支 3.本地化的日志,高速获得信息 git命令的使用 mkdi ...

  6. 版本号控制-git(二)

    上次文章给大家介绍了Git的一些基本知识(http://www.cnblogs.com/jerehedu/p/4582398.html).并介绍了使用git init初始化化版本号库.使用git ad ...

  7. [Android Studio 权威教程]AS 中配置强大的版本号管理系统(Git、SVN、等)

    在Eclipse中加入Git等版本号管理工具须要自己加入插件.并且个人认为不咋好用,在AS中已经给我们集成好了,我们仅仅须要配置一下就OK了.今天就和大家聊聊怎么配置以及使用的要点. 1. 安装Git ...

  8. GIT 单个文件还原到历史版本号

    首先检查在历史文件中的版本号信息:git log <file> 将文件还原到历史版本号:git reset 版本号 <file> 文档工作区的检测:git checkout - ...

  9. Git 进阶指南(git ssh keys / reset / rebase / alias / tag / submodule )

    在掌握了基础的 Git 使用 之后,可能会遇到一些常见的问题.以下是猫哥筛选总结的部分常见问题,分享给各位朋友,掌握了这些问题的中的要点之后,git 进阶也就完成了,它包含以下部分: 如何修改 ori ...

  10. 初识Git

    Git是目前世界上最先进的分布式版本控制系统.在Git诞生之前,我们一直使用的是集中式版本控制系统(如CVS.SVN等),那么两者有什么不同呢?分布式的优势又在哪里呢? 分布式vs集中式 集中式版本控 ...

随机推荐

  1. 【深度学习】c++部署onnx模型(Yolov5、PP-HumanSeg、GoogLeNet、UNet)

    这两天部署了好多模型,记录一下.代码链接. onnxruntime在第一张图的推理上比opencv快很多,但在后面的图上略微慢了一点. 不同的模型的部署时的输出不同,处理时需要对输出比较了解,下面分别 ...

  2. TensorRT环境配置(VS+opencv4.5)

    1 TensorRT下载 下载与TensorRT相匹配的CUDA和cuDNN版本:https://docs.nvidia.com/deeplearning/tensorrt/archives/tens ...

  3. 算法金 | 你真的完全理解 Logistic 回归算法了吗

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 今日 178/10000 1. 引言 吴恩达:机器学习的六个核心算法!, 通透!!十大 ...

  4. 微信小程序跳转重新加载目标页

    可用于在首次进入到小程序后就执行性了首页的onLoad方法,等你再去点击其它页面再回来的时候就不会加载onLoad了,比如你跳到登录页后再返回到首页会发现首页啥数据都没加载,所以你在登录那边进行跳转的 ...

  5. IDEA的安装、激活(到25年2月)&汉化

    1,在官网下载IDEA软件,官网 2,下载之后,双击安装包,然后一直点击next即可. (中间可以按照自己的要求设置安装目录) 3,快捷方式和java打钩 4,点击install即可进行安装,时间有一 ...

  6. DoNet Core的启动过程-WebApplicationBuilder

    1.前言 在NET6开始做ASP.NETCore的开发,我们首先要看的是启动过程,而WebApplication和WebApplicationBuilder 类是启动过程好不开的类,WebApplic ...

  7. C#.NET 不可见字符DEL

    不可见字符DEL .空格.替换掉. 签名时遇到了客户端发过来的数据包含一个DEL.Notepad++ 里显示为DEL. 包含这个字符签名给上游,就会报错:签名错误. 得想办法replace掉.目前方案 ...

  8. Scrapy框架(九)--分布式爬虫

    分布式爬虫 - 概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取. - 作用:提升爬取数据的效率 - 如何实现分布式? - 安装一个scrapy-redis的组件 爬取到的数据自动存 ...

  9. CF1523D Love-Hate

    抽象化题意: 一共有 \(m\) 个元素,给定 \(n\) 个集合,每个集合的元素不超过 \(15\) 个,求出一个元素个数最多的集合 \(S\) 是至少 \(\lceil \dfrac{n}{2} ...

  10. HTTP协议 学习:1-报文分析

    HTTP协议 学习:1-报文分析 背景 上一讲我们介绍了HTTP协议的一些 概念 ,对HTTP协议有了一个基础的认识. 正如之前学习MQTT协议一样,我们需要对HTTP的报文进行分析. HTTP 报文 ...