1 git log -l -pretty=raw // 查看日志 -l是干啥的 2 git log -pretty=raw // 3 git cat-file -t 哈希值 // 查看id的类型
不知道为啥这里我不一样:即使用git log -l --pretty=raw也只是出现commit的,但是git cat-file -p 哈希值则会出现tree和parent。
1 root@tuhooo:~/workspace/demo # git log 2 commit ac31089960196a531c277dc516be678c0aa76489 (HEAD -> master) 3 Author: tuhooo <tuhooo@163.com> 4 Date: Thu Jun 14 16:35:48 2018 +0800 5 6 empyt commit? 7 8 commit 12dc6c72e41e6457e262f6f1be5ec5dd5dcb6b58 9 Author: tuhooo <tuhooo@163.com> 10 Date: Thu Jun 14 15:25:39 2018 +0800 11 12 initialized. 13 root@tuhooo:~/workspace/demo # git cat-file -p ac31 14 tree 190d840dd3d8fa319bdec6b8112b0957be7ee769 15 parent 12dc6c72e41e6457e262f6f1be5ec5dd5dcb6b58 16 author tuhooo <tuhooo@163.com> 1528965348 +0800 17 committer tuhooo <tuhooo@163.com> 1528965348 +0800 18 19 empyt commit?
查看tree对象的信息:
1 root@tuhooo:~/workspace/demo # git cat-file -p 190d 2 100644 blob 18832d35117ef2f013c4009f5b2128dfaeff354f welcome.txt
这里blob对象保存着文件"welcome.txt"的内容。
1 root@tuhooo:~/workspace/demo # git cat-file -t 18832d35117ef2f013c4009f5b2128dfaeff354f 2 blob 3 root@tuhooo:~/workspace/demo # git cat-file -p 18832d35117ef2f013c4009f5b2128dfaeff354f 4 Hello.
这些对象都是存放在git库中的objects目录下(id的前两位作为目录名,后38位作为文件名)。
在commit对象之间的相互关联,可以很容易识别出一条跟踪链。最后一个commit没有parent属性,所以跟踪链到此终结,此即为提交的起点。
1 git log --pretty=raw --graph ac31 2 git status -s -b // 查看工作区和暂存区的改动 -s 精简信息 -b 显示当前分支
1 git branch // 查看当前分支, 前面标有*号的是当前分支 2 // 下面三个命令的输出是一样的 3 git log -l HEAD 4 git log -l master 5 git log -l refs/heads/master
也就是在当前的版本库中,HEAD、master和refs/heads/master具有相同的指向。接下来一步一步从HEAD到master再到commit。得出的结论是master指向的是一个提交ID(最新提交)。即用一个文件指向这个链条的最新提交。
find .git -name HEAD -o -name master
在.git/logs目录下的文件以后再讨论,现在看.git/HEAD和.git/refs/heads/master上。
cat .git/HEAD
cat .git/refs/heads/master
git cat-file -t e69606 // 查看该提交
查看该提交的内容
用一个文件指向最新的提交,就是.git/refs/heads/master了。
1 git rev-parse // 显示引用对应的提交 2 git rev-parse master 3 git rev-parse refs/heads/master 4 git rev-parse HEAD