『现学现忘』Git分支 — 39、Git中分支与对象的关系
1、Git对象之间的关系
我们之前学了Git的三个对象:提交对象
、树对象
、数据对象
。
我们假设现在有一个工作目录,里面进行了三次提交,包括一次新增文件和两次对文件的修改。
- 每次一把工作区中的文件添加到暂存区时,暂存操作会为每一个文件计算校验和,然后会把当前版本的文件快照(即文件的内容)保存到 Git 仓库中 (Git 使用
blob
对象来保存它们),最后将校验和加入到暂存区域等待提交。 - 每一次使用
git commit
命令进行提交操作时,Git会先计算每一个子目录的校验和, 然后在 Git 仓库中这些校验和保存为树对象。
随后,Git 便会创建一个提交对象, 它除了包含上面提到的那些信息外,还包含指向这个树对象的指针。 如此一来,Git 就可以在需要的时候重现此次保存的快照。
此时的Git仓库中就会有五个Git对象:三个 blob
对象(保存着文件快照)、一个 树 对象 (记录着目录结构和 blob
对象索引)以及一个 提交 对象(包含着指向前述树对象的指针和所有提交信息)。
这个对象之间的关系,如下图:
总结提交对象
、树对象
、数据对象
之间的关系:
- 一个提交操作生成一个提交对象。
- 一个提交对象包含一个(暂存区)生成
Tree
对象。(对Tree
对象的封装,单方向一对一) - 一个(暂存区)生成
Tree
对象,里面包含子Tree
对象和Blob
对象。子Tree
对象还可以继续包含子Tree
对象和Blob
对象。
这样子Tree
对象对应文件系统中的目录+文件名
,Blob
对象对应着文件中的内容,这就是Git中数据存储的形式。 - 一个
Blob
对象对应着一个文件某一时刻的版本。
三种对象之间的关系如下图:
那么问题来了:每一个Commit
对象,是怎样的组合到一起的呢?
2、提交对象与分支的关系
(1)提交对象与分支的关系
Git版本管理系统是以时间线来对版本进行管理的,这条时间线上会有很多的时间节点,这些时间节点就是一个个的Commit
对象。
即:Git的每次提交,都会自动把它们串成一条时间线,这条时间线就是一个分支。
如下图所示:每一次提交产生的提交对象,会包含一个指向上次提交对象(父对象)的指针,这样就形成了一条链状结构,就相当于一条线。
(2)分支说明
Git的分支,其实本质上仅仅是指向提交对象的可变指针。
Git仓库初始化之后,会默认创建一个master
分支,即主分支。
如果没有新建分支,那么就只有一条时间线,即只有一个分支,master
分支(主分支)。
每次提交操作之后,会生成新的提交对象(如上图), master
分支会在每次提交时自动向前移动。(也就是自动指向最新的提交对象)
(3)HEAD与分支的关系
我们在学习Git的时候,常常会看到HEAD
这个名称,它指的是什么呢?
Git中维护一个名为HEAD
的引用变量,我们将此变量称为指针,它的目的是引用或指向本地版本库中的特定提交。
当我们进行新的提交时,指针将改变或移动,以指向新的提交。
HEAD
始终指向Git本地版本库中当前正在工作的分支的尖端(即最新一次提交)。
概括来说:HEAD
是对当前分支中,最后一次提交的引用。(可以将HEAD
想象为是,当前分支最后一次提交的别名。)
再继续:
HEAD
严格来说不是指向提交,而是指向master
(分支),master
(分支)才是指向具体的提交,所以,HEAD
指向的就相当于是当前分支的最新一次提交。
如下图所示:
Git用master
指向最新的提交,再用HEAD
指向master
,就能确定当前分支,以及当前分支的提交点。
(当然HEAD
还有一种分离的状态,我们以后单说,关于HEAD
就先理解到这里就很详细了)
『现学现忘』Git分支 — 39、Git中分支与对象的关系的更多相关文章
- 『现学现忘』Git分支 — 38、Git分支介绍
目录 1.Git分支简介 2.Git分支与SVN分支的区别 3.工作中为什么要使用分支 4.Git分支管理的好处 1.Git分支简介 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着,你可 ...
- 『现学现忘』Git分支 — 40、分支基本操作(一)
目录 1.创建分支 (1)创建分支 (2)图示理解 2.查看分支列表 3.分支切换 4.查看所有分支的最后一个提交 5.删除分支 1.创建分支 (1)创建分支 Git 是怎么创建新分支的呢? 很简单, ...
- 『现学现忘』Git分支 — 41、分支基本操作(二)
目录 6.新建一个分支并且使分支指向指定的提交对象 7.思考: 8.项目分叉历史的形成 9.分支的总结 提示:接上篇 6.新建一个分支并且使分支指向指定的提交对象 使用命令:git branch br ...
- 『现学现忘』Git基础 — 5、Git的协作模式
目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
- 『现学现忘』Git基础 — 3、Git介绍
目录 1.Git的历史 2.Git的特点 3.Git在项目协作开发中所解决的问题 1.Git的历史 Git是目前世界上最先进的分布式版本控制系统,开源.免费. Git 是 Linus (林纳斯)为了帮 ...
- 『现学现忘』Git基础 — 6、Git的操作流程
目录 1.Git的基本操作流程 2.工作区.暂存区.版本库的区别 (1)工作区 (2)版本库 (3)暂存区 (4)通过新增文件理解三个区的关系 (5)说明 1.Git的基本操作流程 初始化一个本地版本 ...
- 『现学现忘』Git基础 — 8、Git创建本地版本库
目录 1.Git版本库介绍 2.创建本地版本库 场景一:创建一个空的本地版本库. 场景二:项目中已存在文件时,创建该项目的本地版本库. 场景三:在GitHub网站上创建仓库,克隆到本地. 1.Git版 ...
- 『现学现忘』Git基础 — 12、Git用户签名(补充)
目录 1.修改用户签名 2.取消用户签名 3.用户签名的优先级 4.总结本文用到的Git命令 1.修改用户签名 其实很简单,就是重新执行git config命令,换个用户名和邮箱地址就可以了,新配置的 ...
随机推荐
- PKUSC 2022 口胡题解
\(PKUSC\ 2022\)口胡题解 为了更好的在考试中拿分,我准备学习基础日麻知识(为什么每年都考麻将 啊啊啊) 首先\(STO\)吉老师\(ORZ,\)真的学到了好多 观察标签发现,这套题覆盖知 ...
- 【原创】Python 网易易盾滑块验证
本文仅供学习交流使用,如侵立删! 记一次 网易易盾滑块验证分析并通过 操作环境 win10 . mac Python3.9 selenium.PIL.numpy.scipy.matplotlib 分析 ...
- BTDetect用户手册和技术支持
BTDetect用户手册和技术支持 1. 程序主要功能 BTDetect是BT(BioTechnology) Detect 生物科技检测的缩写.本程序将根据用户的回答推断其两大基因类型.以及具体的小分 ...
- vue中vuex实现持久化的几种方法
前提:大家都知道vuex真的数据共享是不持久的,例如登录后一刷新,state中存的token就会消失,导致你需要再次进行登录操作 在这给大家列出几种解决方案: 第一种(也是一些项目中常使用的):使用缓 ...
- PerfView专题 (第一篇):如何寻找热点函数
一:背景 准备开个系列来聊一下 PerfView 这款工具,熟悉我的朋友都知道我喜欢用 WinDbg,这东西虽然很牛,但也不是万能的,也有一些场景他解决不了或者很难解决,这时候借助一些其他的工具来辅助 ...
- PTA C语言作业
6-1 使用函数输出一个整数的逆序数 (20 分) 本题要求实现一个求整数的逆序数的简单函数. 函数接口定义: int reverse( int number ); 其中函数reverse须返回用户 ...
- 大数据Hadoop平台安装及Linux操作系统环境配置
配置 Linux 系统基础环境 查看服务器的IP地址 设置服务器的主机名称 hostnamectl set-hostname hadoop hostname可查看 绑定主机名与IP 地址 vim /e ...
- 【Java面试】这应该是面试官最想听到的回答,Mysql如何解决幻读问题?
"Mysql如何解决幻读问题" 一个工作了4年小伙伴,去一个美团面试,遇到了这样一个问题. 大家好,我是Mic,一个工作了14年的Java程序员 关于这个问题,面试官想考察什么?我 ...
- ES6之前,JS的继承
继承的概念 谈到继承,就不得不谈到类和对象的概念. 类是抽象的,它是拥有共同的属性和行为的抽象实体. 对象是具体的,它除了拥有类共同的属性和行为之外,可能还会有一些独特的属性和行为. 打个比方: 人类 ...
- MySQL数据备份 mysqldump 详解
MySQL数据备份流程 1 打开cmd窗口 通过命令进行数据备份与恢复: 需要在Windows的命令行窗口中进行: l 开始菜单,在运行中输入cmd回车: l 或者win+R,然后输入cmd回车,即可 ...