参考文章:https://zhuanlan.zhihu.com/p/96631135

参考文章:https://marklodato.github.io/visual-git-guide/index-zh-cn.html

PART 1 git内部存储信息的方式

在.git/objects里面有几种objects

blob: 节点,只储存文件内容,不包含文件名信息,在add之后就会存在,对象文件名是SHA值。

tree: 树,当前目录结构的快照,每一个文件 / 文件夹 的 权限 / 类型 / SHA值 / 文件名。

commit: 提交,tree的SHA值,上一个提交的SHA值,提交的作者和具体时间,提交的信息

分支信息位置

cat .git/HEAD

cat .git/refs/heads/master 会指向一个提交对象

PART 2 三个分区如何变更

三分区:

工作目录: working deriectory: 操作系统上的文件

索引 / 暂存区:Index / stage: 存着一个索引,这个索引可以认为是一个tree,而储存下来的tree对象是该索引的快照。在.git/index 文件中保存。

仓库:repository: 记录每一次提交

之间相互转换的关系:

 

git add:建立blob对象,更新索引(将文件指向新的对象)

git commit: 根据当前索引生成一个tree对象,创建一个新的commit对象,由之前的commit对象生成,组成一条变更历史。

Q & A

Q:git储存的是文件快照还是变更部分?

A:文件快照。哪怕修改一点也是全新的一个blob。checkout commit很方便,

  另外git还有垃圾回收机制,会清楚无用的object, 还会把相似的打包压缩。

Q:git checkout到底是啥意思?

A:有两种用法:

  git checkout sth: 切换分支,把HEAD指向某个commit对象,这个commit对象可以是SHA值确定的,也可以是分支确定的,

  eg.  git checkout HEAD^ 切换到当前HEAD的上一个提交

    git checkout 244006 切换到SHA为244006的commit对象

    git checkout master 切换到master分支对应的提交

  git checkout sth somefile: 并不切换HEAD的指向,而只是把某个文件恢复到某个状态。

Q:git reset是啥意思?

A:将当前的分支指向另一个提交。

【git】git的内部原理的更多相关文章

  1. Git详解之九:Git内部原理

    Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的, ...

  2. git内部原理

    Git 内部原理 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理 和实现方式. 我们发现学习这部分内容对于理解 Git 的用途和强大至关重要. ...

  3. Git详解之九 Git内部原理

    以下内容转载自:http://www.open-open.com/lib/view/open1328070620202.html Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各 ...

  4. git内部原理-第一篇

    本人计划写一些关于<git内部原理>的文章 计划每周一篇

  5. Git 内部原理 - (7)维护与数据恢复 (8) 环境变量 (9)总结

    维护与数据恢复 有的时候,你需要对仓库进行清理 - 使它的结构变得更紧凑,或是对导入的仓库进行清理,或是恢复丢失的内容. 这个小节将会介绍这些情况中的一部分. 维护 Git 会不定时地自动运行一个叫做 ...

  6. Git 内部原理--初探 .git

    说到Git大家应该都非常熟悉,几乎每天都会用到它.在日常使用过程中,我们貌似并不需要关注其内部的原理,只需要记住那几个常用的命令,就可以说自己是会Git的人了.可是,事实真的是这样子的吗?今天我们就来 ...

  7. Git内部原理浅析

    Git独特之处 Git是一个分布式版本控制系统,首先分布式意味着Git不仅仅在服务端有远程仓库,同时会在本地也保留一个完整的本地仓库(.git/文件夹),这种分布式让Git拥有下面几个特点: 1.直接 ...

  8. Git详解之内部原理

    前言 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认 ...

  9. Git内部原理探索

    目录 前言 Git分区 .git版本库里的文件/目录是干什么的 Git是如何存储文件信息的 当我们执行git add.git commit时,Git背后做了什么 Git分支的本质是什么 HEAD引用 ...

  10. Git内部原理(1)

    Git本质上是一套内容寻址文件系统,在此之上提供了VCS的用户界面. Git底层命令(plumbing) vs 高层命令(porcelain) Git的高层命令包括checkout.branch.re ...

随机推荐

  1. Powercli随笔 - PowerCLI script to sequentially Storage vMotion VMs from a CSV File

    PowerCLI script to sequentially Storage vMotion VMs from a CSV File This is a PowerCLI script that I ...

  2. Gcd的原理理解

    Ps:最小公倍数=a*b/gcd(a,b) a除以b的商为p,余数为q,a=b*p+q,gcd(b,q)可以整除a和b,因此gcd(b,q)也能整除gcd(a,b):反过来,gcd(a,b)也能整除g ...

  3. HBase最佳实践-读性能优化策略

    任何系统都会有各种各样的问题,有些是系统本身设计问题,有些却是使用姿势问题.HBase也一样,在真实生产线上大家或多或少都会遇到很多问题,有些是HBase还需要完善的,有些是我们确实对它了解太少.总结 ...

  4. js-xlsx sheet_to_json 读取小数位数变多

    read as string . 例如:2.85 读取后变成 2.84999999999999999 这种. 以字符串形式读取. XLSX.utils.sheet_to_json(workbook.S ...

  5. HTML- 锚点实例

    <!DOCTYPE HTML> <html> <head> <meta charset='utf-8'> <title>锚点实例</t ...

  6. 【图像编辑】三款图像编辑软件Photoshop、AffinityPhoto、Gimp非专业简单横向对比

    人的感知分为:视觉.听觉.嗅觉.味觉.触觉.视觉即是对光的强弱.颜色.鲜艳程度的感知.视觉在纸质上通过图像来表达,在计算机数字领域则通过图像(位图)和图形(矢量图)来表达,本文提及的三款软件均为图像( ...

  7. [CF895E] Eyes Closed(线段树,期望)

    Desctiption 传送门:Portal 大致题意: 给你一个序列, 支持两种操作: 1 l1 r1 l2 y2 在\([l1, r1]\)随机选择一个数a, \([l2, r2]\) 内随机选择 ...

  8. 转 cpu高 问题分析定位

    文章来源: http://www.blogjava.net/hankchen/archive/2012/08/09/377735.html 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原 ...

  9. LR 场景设置

    LR 场景设置group:多个脚本按照独立设置模式跑,各个脚本可以单独设置虚拟用户.运行时间scenario:多个脚本之间按照相同模式跑,将总的虚拟用户数按照一定比例分配给各个脚本 schedule ...

  10. JS字符串和数组之间的转换

    1.字符串转换为数组 var string = '123,456,789'; var stringResult = string.split(','); console.log(stringResul ...