来我们先捋一遍从新建文件到commit的流程:
-
新建两个txt文件
-
aqin1012@aqin1012deMacBook-Pro git-test % git add aqin.txt aqin1012@aqin1012deMacBook-Pro git-test % git add aqin2.txt
-
-
git add 其中一个
-
aqin1012@aqin1012deMacBook-Pro git-test % git add aqin.txt
-
- 使用git cat-file -t查看下这个生成对象的类型:
- git add另一个
-
aqin1012@aqin1012deMacBook-Pro git-test % git add aqin2.txt
-
- 使用git cat-file -t查看下这个生成对象的类型:
可以看到每add一个文件对应的.git/objects文件夹中就会多出一个blob对象
-
git commit提交到本地仓库
-
aqin1012@aqin1012deMacBook-Pro git-test % git commit -m "first test"
-
commit后,.git/objects文件夹中就会多出两个对象,我们来看看这两个对象分别是啥么~~
-
先查看上面那个99开头的文件
-
git cat-file -t 查看对象类型
-
aqin1012@aqin1012deMacBook-Pro git-test % git cat-file -t 99ce05
-
-
SO~这是一个commit对象
-
git cat-file -p 查看对象内容
-
aqin1012@aqin1012deMacBook-Pro git-test % git cat-file -p 99ce05
-
这个commit对象中包含了一个tree对象、作者信息,以及提交者信息
-
同样我们再看另一个新增的对象
SO~这是一个tree对象
这个tree对象中包含了2个blob对象(就是我们刚才add的那两个)
不知道大家有没有发现:
新增的commit 对象中就包含了新增的那 tree 对象
总结
- 一次commit会产生一个commit对象和tree对象
- 一个commit对象中包含作者信息/提交者信息和一个tree对象