美文网首页
git原理探索(三)

git原理探索(三)

作者: 若兮缘 | 来源:发表于2018-12-11 20:31 被阅读131次

git版本控制演示

git记录变化的文件快照
  1. 创建如下多级目录结构,根目录 - 2个子目录 - 3个子文件,文件都是有内容的且各不相同。

执行一次提交操作,创建了7个对象,其中3个tree对象、3个blob对象和1个commit对象。

  1. 修改common.js文件,执行提交操作,此时会生成一个新的blob对象,同时引用了该blob的所有tree对象也会重新生成,所以会重新生成4个对象,而未修改的两个文件对应blob对象不变,加上新的commit对象,一共有12个对象。
  1. 创建轻量级的tag对象,生成了一个指针文件,指向了当前的commit对象。
  1. 创建重量级的tag对象,生成了一个tag对象和一个指针文件,指针文件保存了tag对象的引用。
  1. 修改readme.txt文件,此时会生成一个新的blob对象和引用它的根目录对应的tree对象,该tree对象引用的其他对象不变,加上commit对象,一共生成了3个对象,所以总共16个对象。
对象模型变化图

如图显示了三次提交对象的变化情况,第二次提交修改的是最后一个blob对象,第三次提交修改的是第一个blob对象,其中灰色块代表旧版本对象,当前版本不再引用。

版本切换原理

git reset --hard HEAD~1 #回退到上一次提交版本
git reset --hard commitId #切换到指定的版本,commitId就是commit对象的hash值
版本切换实际上是改变当前活动分支的指向,指向其他版本的commitId,然后重新检出HEAD内容(更新工作区)。
根据这个原理我们可以这么做同样达到切换版本的效果:
vim .git/refs/heads/master #修改为你需要切换的commit对象完整hash值
git checkout -f HEAD #重新检出HEAD

版本切换演示

在demo目录下初始化git仓库,然后进行3次提交操作,每次新增一个对应版本的文件进行提交。可以通过git log命令查看提交记录,然后执行git reset操作切换到版本2,对比两个版本的master指向。

此时我们使用另一种方式切换回版本3,使用vim编辑master文件,修改内容为版本3的hash值,然后执行git checkout命令对HEAD进行重新检出,此时工作区的内容就更改回版本3了。

注意:一旦版本回退后,通过git log将无法显示从回退版本到最新版本之间的commit对象 ,可以通过git reflog 查看(显示缩减的hash值)

相关文章

  • git原理探索(三)

    git版本控制演示 git记录变化的文件快照 创建如下多级目录结构,根目录 - 2个子目录 - 3个子文件,文件都...

  • git原理探索(一)

    git对文件的处理 文件File 任何文件对计算机而言都为一系列的二进制数,文件的内容通常我们使用字节流来表示它,...

  • git原理探索(二)

    git对象 每一个git对象都由3部分组成:类型(type)、大小(size)和内容(content)大小就是内容...

  • git操作手册

    首先告诉你真相:新人无法理解 git 的原理,你只能背命令。等你用 git 用一个月,再谈原理。 用 git 三个...

  • 探索iOS底层原理第四篇——Category的本质

    本系列是学习iOS底层原理过程中的记录笔记第三篇,往期目录:探索iOS底层原理开篇——对象本质探索iOS底层原理第...

  • 探索iOS底层原理第三篇——KVC

    本系列是学习iOS底层原理过程中的记录笔记第三篇,往期目录:探索iOS底层原理开篇——对象本质探索iOS底层原理第...

  • iOS 底层原理 + 逆向 文章汇总

    iOS 底层原理 objc4 源码相关 0、底层源码探索方式iOS-底层原理 01:源码探索的三种方式[https...

  • Git 操作手册

    首先告诉你真相:新人无法理解 git 的原理,你只能背命令。等你用 git 用一个月,再谈原理。用 git 三个月...

  • iOS底层原理探索—内存管理(一)

    探索底层原理,积累从点滴做起 往期回顾 iOS底层原理探索 — OC对象的本质 iOS底层原理探索 — class...

  • Git之基础命令

    1、三个工作区域 使用Git之前,首先要弄清Git的三个管理区域,有助于理解Git的运行原理,以及每个Git命令对...

网友评论

      本文标题:git原理探索(三)

      本文链接:https://www.haomeiwen.com/subject/bxzehqtx.html