参考文章: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:将当前的分支指向另一个提交。

最新文章

  1. 如何删除 eclipse debugger 下不用的Java Application
  2. 事实证明,abstract类除了不能用new实例化和类没什么区别
  3. mysql源码解读之配置文件
  4. USE “schema_name” in PostgreSQL
  5. 【Gym 100610A】Alien Communication Masterclass
  6. 【Todo】pthread_key_t 和 pthread_once_t学习
  7. AES对称加密算法原理(转载)
  8. 《Windows核心编程》第5版 学习进度备忘
  9. wpa_supplicant是什么?
  10. Burpsuite暴力破解
  11. 一个简单的node.js服务
  12. Coursera, Big Data 3, Integration and Processing (week 5)
  13. 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
  14. 学习 Spring (八) 注解之 Bean 的定义及作用域
  15. mongodb管理与安全认证
  16. [转]Python shutil 模块
  17. 11.18 Daily Scrum
  18. 蓝牙协议 HFP,HSP,A2DP,A2DP_CT,A2DP_TG,AVRCP,OPP,PBAP,SPP,FTP,TP,DTMF,DUN,SDP
  19. MySQL5.7.20 二进制包 在Linux系统中的 安装和配置
  20. Opserver 初探二《exceptions配置》

热门文章

  1. 用 Flask 来写个轻博客 (35) — 使用 Flask-RESTful 来构建 RESTful API 之四
  2. mvc 当中 [ValidateAntiForgeryToken] 的作用 转载https://www.cnblogs.com/hechunming/p/4647646.html
  3. python使用消息队列RabbitMq(入门)
  4. c++实现哈夫曼树,哈夫曼编码,哈夫曼解码(字符串去重,并统计频率)
  5. JavaScript HashTable
  6. 快捷键 xshell
  7. 【Python—字典的用法】找到多个字典的公共键
  8. fieldset与legend,label
  9. windows修改docker的默认存放位置
  10. 从FreeBSD里面看到的网络协议列表,感觉可以保存一下