Git学习——Git对象及游标的简单介绍

读《Git 权威指南》——笔记

1
git log -1 --pretty=raw

可以看到有三个哈希值所表示的对象,分别是这次提交的标识、目录树、本次提交的父提交

我们可以用命令

1
git cat-file -t 9c0ac

来查看该哈希值所表示的是什么对象。(其中哈希值不用全部输入,只需输入前面一小段不冲突的字符)

 图 1

 图 2

1
git cat-file -p 9c0ac

查看该对象的内容

 图 3

当查看 tree 的对象的时候,发现里面还包含这另外一个对象 blob, 这个对象保存着 a.txt 的内容。我们查看一下

 图 4

1
git log --pretty=raw --graph 9c0ac

可以查看该对象的父提交的跟踪链,到了最后一个的时候便没有 parent 对象。

 图 5

1
git branch

查看分支

 图 6

可见,当前有两个分支。一个是 master, 和 pre 分支

1
git log HEAD -1

查看当前游标的指向。(HEAD 称为游标,用于指向不同分支中的不同提交。下面会详细说明)

1
git log master -1

查看当前 master 的提交标识

1
git log pre -1

查看当前 pre 的提交标识

 图 7

若加上参数 —pretty=oneline 则显示精简模式

 图 8

可见,当前的 HEAD 游标和 master 的指向是一样的,所以当前的 HEAD 是指向 master 的最后一个提交

现在我们切换一下分支
查看当前 master 的提交标识

1
git checkout pre

 图 9

可见,切换分支之后,游标 HEAD 就指向 pre 的最新的提交了。

下面我们来看看这些对象都存放了在哪里

1
find .git -name HEAD -o -name master -o -name pre

再把他们输出查看

1
2
3
cat .git/HEAD
cat .git/refs/heads/master
cat .git/refs/heads/pre

 图 10

可见,HEAD 是指向了 refs/heads/master(而不是一个具体的哈希值)。与上面一一对应。完全相同。

还介绍多一个底层命令,用语查看引用对应的提交 ID(哈希值):

1
git rev-parse HEAD

 图 11