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. AspNetCore-MVC实战系列(三)之个人中心

    AspNetCore - MVC实战系列目录 . 爱留图网站诞生 . git源码:https://github.com/shenniubuxing3/LovePicture.Web . AspNetC ...

  2. java.util.zip.ZipException: invalid LOC header (bad signature)

    Debug on Server(Tomcat 9) 遇到这个exception: SEVERE: A child container failed during startjava.util.conc ...

  3. 使用Angular 4、Bootstrap 4、TypeScript和ASP.NET Core开发的Apworks框架案例应用:Task List

    最近我为我自己的应用开发框架Apworks设计了一套案例应用程序,并以Apache 2.0开源,开源地址是:https://github.com/daxnet/apworks-examples,目的是 ...

  4. 最简单的html5语言

    什么是 HTML5? HTML5 是下一代 HTML 标准. 最小的HTML5文档 下面是一个简单的HTML5文档: <</span>!DOCTYPE html><< ...

  5. ios模拟器bug

    Error: xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Libra ...

  6. CSS3特效----图片动态提示效果

    需掌握的知识点: 1.掌握两个HTML5新标签figure以及figcaption的用法 2.掌握transform的属性特点,并能熟练运用 3.学会通过transition及transform配合, ...

  7. c++ STL stack & queue

    Stack 主要的方法有如下: empty() 堆栈为空则返回真                  pop() 移除栈顶元素(不会返回栈顶元素的值)                  push() 在 ...

  8. 第三章 霍夫变换(Hough Transform)

    主要内容: 霍夫变换的作用 霍夫变换检测直线的原理 霍夫变换检测圆的原理 OpenCV中的霍夫变换 1.霍夫变换检测直线原理 霍夫变换,英文名称Hough Transform,作用是用来检测图像中的直 ...

  9. Unity中提升像素字体清晰度

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity5.6.0f3 Unity UI系统是非常好的,但默认情况下,使用像像素艺术风格游戏那样需要非常锋利的边框的字体 ...

  10. 从.Net版本演变看String和StringBuild性能之争

    在C#中string关键字的映射实际上指向.NET基类System.String.System.String是一个功能非常强大且用途非常广泛的基类,所以我们在用C#string的时候实际就是在用.NE ...