接下來我們繼續(xù),將文件commit到版本庫(repository):
$ git commit -m 'commit A.txt'
[master (root-commit) f225037] commit A.txt
1 file changed, 1 insertion(+)
create mode 100644 A.txt
再來看看objects里面的變化:

image.png
這一次又多了2個東西,我們先查看完整的信息:
$ find .git/objects/
.git/objects/
.git/objects//f2
.git/objects//f2/250375e5113c7994b7f15cf51a2a48bf98cf7e
.git/objects//pack
.git/objects//info
.git/objects//f7
.git/objects//f7/0f10e4db19068f79bc43844b49f3eece45c4e8
.git/objects//12
.git/objects//12/ed70cbd523efd5f5209b9d6fb20bc9fd7fbb4c
再使用分析命令逐一分析:
$ git cat-file -t 12ed
tree
$ git cat-file tree 12ed
100644 A.txt????y?C?KI???E??
$ git cat-file -t f225
commit
$ git cat-file commit f225
tree 12ed70cbd523efd5f5209b9d6fb20bc9fd7fbb4c
author xxx <xxx@xxx.com> 151....551 +0800
committer xxx <xxx@xxx.com> 151....551 +0800
commit A.txt
得到的結(jié)果就是:
1.tree記錄的是指向文件A.txt的地址,準(zhǔn)確的說是指向暫存區(qū)(stage)的index;
2.commit記錄的是備注信息,即git commit -m 'commit A.txt'中```單引號里的內(nèi)容。
最后我們看一下提交的記錄:
$ git reflog
f225037 (HEAD -> master) HEAD@{0}: commit (initial): commit A.txt
是否有發(fā)現(xiàn)f225037似曾相識?其實就是指的commit !

image.png
結(jié)論:
1.git commit后objects下新增一個tree和一個commit文件。
2.tree:一個單獨(dú)的tree對象包含一條或多條tree 記錄,每一條記錄含有一個指向 blob或tree 對象的 HS-1 指針,并附有該對象的權(quán)限模式 (mode)、類型和文件名信息(后面會詳細(xì)解讀);
3.commit記錄的是tree的HS-1值 ;
3.HEAD -> master -> commit -> tree ;