git commit

git commit 命令执行后, git 主要执行了三个操作:

  1. 为每一个文件生成一个快照

    每一个文件其实是真的数据, 所以 git 会把整个文件内容转成二进制, 然后经过压缩直接存储在键值对数据库中, 对应的键值就是文件中的内容, 再加上一些头信息的 40 位校验 和 sha-1 .

    文件快照的类型为 blob 类型(binary large object) , 即大型二进制对象类型.

  2. 为每一个文件夹生成一个快照

    文件夹并不是直接的文字数据, 其主要记录的是文件夹的结构和每个文件或者文件夹对应的快照键值, 所以文件夹的快照内容是其包含的所有文件和文件夹的键值信息总和, 附加一些头信息, 如文件名,文件夹名. 对应快照键值为快照内容的 40位校验和 sha-1 ,

    文件夹快照对应的类型为 tree.

  3. 生成一个项目快照

    即 生成一个 commit, 项目快照的内容摘要包含四部分信息, 根项目目录的快照/提交人信息/项目快照说明/父项目快照. 其中项目文件快照, 只要根目录的目录快照即可.

    项目快照 commit 的键值为 项目快照内容的 40位校验和 sha-1.

    项目快照类型为 commit 类型.

git 中生成的所有 object 都存在 .git/objects/ 文件夹中, 每一个 object 保存时, 取其 40位检验和 sha-1 的前两位生成文件夹, 后 38 位作为文件名, 存储对应的数据.

只有变化的文件或文件夹才会形成新的快照, 没有变化的文件不会形成新的快照.

git branch

branch 信息记录在 .git/refs/heads/ 目录下

$cat .git/refs/heads/master
1e3db1046b3f0d07aeb51d9704792e611a1a7a80

branche 仅仅是指向一个 commit 的指针而已, 指向一个 commit, 而一个 comit 同时指向其父 commit, 如此循环形成一个 branch.

git HEAD 指针

git 有一个独立的 HEAD 指针, 记录项目现在所在的位置.

$cat .git/HEAD
ref: refs/heads/master  # 此时指针指向 master , 表示现在在 master 分支上.

当我们创建新的分支 test 时, git 会在 .git/refs/heads/ 目录下生成一个文件 test, 并将其指向当前 HEAD 所指向的分支 master 所指向的提交 , 并把 HEAD 指向新的分支 test .

$cat .git/refs/heads/master
1e3db1046b3f0d07aeb51d9704792e611a1a7a80

$cat .git/refs/heads/test
1e3db1046b3f0d07aeb51d9704792e611a1a7a80

当我们在新的分支生成新的 commit 时, git 会将 HEAD 所指向的分支 test 所指向的 commit 作为新 commit 的父 commit, 然后将 HEAD 所指向的分支 test 移动指向新的提交.

git 知识点汇总的更多相关文章

  1. Git知识点汇总

    设置全局用户名 git config --global user.name "yourname" 设置全局邮箱 git config --global user.email &qu ...

  2. nginx几个知识点汇总

    WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...

  3. 常用Git命令汇总

    常用Git命令汇总 跟着R哥来到了新公司(一个从硬件向互联网转型中的公司),新公司以前的代码基本是使用SVN做版本控制,甚至有些代码没有做版本控制,所以R哥叫HG做了一次Git分享,准备把公司所有的代 ...

  4. Git命令汇总(补充篇)

    上一篇<Git命令汇总基础篇>总结了使用Git的基本命令,这一篇作为补充主要给大家讲一些平时使用中的技巧和总结 . 学会了这些命令,已经基本解决了使用Git中大部分问题. 1.gitign ...

  5. Git命令汇总(基础篇)

    自己用Git有一段时间了,随着项目越来越多,功能分支也随之增加,从简单的基础命令到随心所欲,需要自己不断地去尝试总结,下面来分享一下我的Git使用总结. 本章基础篇主要讲解一些Git代码提交流程和Gi ...

  6. python全栈开发 * 10知识点汇总 * 180612

    10 函数进阶 知识点汇总 一.动态参数 形参的第三种1.动态接收位置传参 表达:*args (在参数位置编写 * 表⽰接收任意内容) (1)动态位置参数def eat(*args): print(a ...

  7. 清华大学OS操作系统实验lab1练习知识点汇总

    lab1知识点汇总 还是有很多问题,但是我觉得我需要在查看更多资料后回来再理解,学这个也学了一周了,看了大量的资料...还是它们自己的80386手册和lab的指导手册觉得最准确,现在我就把这部分知识做 ...

  8. c++ 函数知识点汇总

    c++ 函数知识点汇总 swap函数 交换两个数组元素 比如 swap(a[i],a[j]); 就是交换a[i] 和 a[j] 的值 strcpy() 复制一个数组元素的值到另一个数组元素里 strc ...

  9. 前端开发 JavaScript 干货知识点汇总

    很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...

随机推荐

  1. routeProvider路由的使用

    先创建一个主程序文件index.html,内容如下: <!DOCTYPE html> <html ng-app="myApp"> <head> ...

  2. RabbitMQ学习3----运行和管理RabbitMQ

    1.服务为管理 Erlang天生就是为了让应用程序无需知道对方是否存在同一台机器上即可互相通信. Erlang节点:Erlang虚拟机的每个实例.多个Erlang应用程序可以运行在同一个节点之上.节点 ...

  3. smarty的学习计划(1)

    1.什么事smarty? 不知道,smarty是一个使用PHP写出来的模板引擎,它提供了逻辑外在内容的分离 2.smarty优点: a.速度:成熟的模板引擎技术 b.编译型:采用smarty编写的程序 ...

  4. Springmvc+mybatis+restful+bootstrap框架整合

    框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz( ...

  5. 多工程:基于Maven的SSM(Spring,SpringMvc,Mybatis)整合的web工程(中)

    上篇用了单工程创建了SSM整合的web工程(http://www.cnblogs.com/yuanjava/p/6748956.html),这次我们把上篇的单工程改造成为多模块工程 一:创建对应的多工 ...

  6. 深入理解Activity的启动模式

    众所周知,当我们多次启动同一个Activity时,会创建多个该Activity的实例,系统会按照先进后出的原则,将它们一一放进任务栈中,然后我们按back键,系统就会将栈顶的Activity移除栈,直 ...

  7. 前端工程之npm

    package.json是npm package的配置文件,存储当前项目相关的信息.如果下载npm中的包,包内会自带该文件.具体有如下属性: { "name" : "un ...

  8. R语言通过loess去除某个变量对数据的影响

      当我们想研究不同sample的某个变量A之间的差异时,往往会因为其它一些变量B对该变量的固有影响,而影响不同sample变量A的比较,这个时候需要对sample变量A进行标准化之后才能进行比较.标 ...

  9. 开涛spring3(6.4) - AOP 之 6.4 基于@AspectJ的AOP

    Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明. 6.4.1  启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明, ...

  10. MySQL优化总结,百万级数据库优化方案

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...