Git Mechanism<3> commit

接下来我们继续,将文件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里面的变化:

Git Mechanism<3> commit_第1张图片
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  151....551 +0800
committer xxx  151....551 +0800

commit A.txt

得到的结果就是:
1.tree记录的是指向文件A.txt的地址,准确的说是指向暂存区(stage)的index
2.commit记录的是备注信息,即git commit -m 'commit A.txt'中```单引号里的内容。

最后我们看一下提交的记录:

$ git reflog
f225037 (HEAD -> master) HEAD@{0}: commit (initial): commit A.txt

是否有发现f225037似曾相识?其实就是指的commit

Git Mechanism<3> commit_第2张图片
image.png

结论:

1.git commitobjects下新增一个tree和一个commit文件。
2.tree:一个单独的tree对象包含一条或多条tree 记录,每一条记录含有一个指向 blobtree 对象的 HS-1 指针,并附有该对象的权限模式 (mode)、类型和文件名信息(后面会详细解读);
3.commit记录的是treeHS-1值 ;
3.HEAD -> master -> commit -> tree ;

你可能感兴趣的:(Git Mechanism<3> commit)