1. HEAD
在git
中,可以存在很多分支,其本质上是一个指向commit
对象的可变指针,而Head
是一个特别的指针,是一个指向你正在工作中的本地分支的指针
简单来讲,就是你现在在哪儿,HEAD
就指向哪儿
例如当前我们处于master
分支,所以HEAD
这个指针指向了master
分支指
然后通过调用git checkout test
切换到test
分支,那么HEAD
则指向test
分支,如下图:
但我们在test
分支再一次commit
信息的时候,HEAD
指针仍然指向了test
分支指针,而test
分支指针已经指向了最新创建的提交(上一次提交的子节点),如下图:
这个HEAD
存储的位置就在.git/HEAD
目录中,查看信息可以看到HEAD
指向了另一个文件
$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
7406a10efcc169bbab17827aeda189aa20376f7f
这个文件的内容是一串哈希码,而这个哈希码正是master分支上最新的提交所对应的哈希码
所以,当我们切换分支的时候,HEAD指针通常指向我们所在的分支,当我们在某个分支上创建新的提交时,分支指针总是会指向当前分支的最新提交
所以,HEAD指针 ——–> 分支指针 ——–> 最新提交
2. 工作树和索引
1、 在Git
管理下,大家实际操作的目录被称为工作树,也就是工作区域
2、索引就是我们通常说的暂存区,他其实是个文件