Git HEAD
虽然使用Git很多年,但是仍然对head没有清晰的认识。head属于隐藏于Git内部的东西,网上很多介绍head的文章也总是说不清道不明,所以记录一下。
1、Git HEAD 存放位置
HEAD 其实是一个指针,内容是 .git/HEAD
文件里面的内容,它存储着当前分支的名字,我们可以打这个文件看一看:
1 |
|
由此,我们可以得知当前所处于 master
分支。如果我们继续往下走:打开 refs/heads/master
文件,一串密码映入眼帘:
1 |
|
正如每个git入门教程里说的,这个 refs/heads/master
里存储其实就是当前commit的引用
其实,我们可以看下面的这张示意图,对于header的理解将会一目了然:
可以理解为一个仓库就是一颗树,每个分支则是不同的树枝,树枝上有不同的节点(代表每一个commit),而commit之前也有父子关系,HEAD指针则是指向commit id,HEAD所在的commit就是目前本地仓库的状态。
那平时我们提交commit则是增加节点,同时HEAD指针后移。但git的强大,不止如此,还可以通过reset、checkout、revert、merge和rebase等操作指令,花式移动指针,游走于整颗commit树。
2、Git HEAD 的作用
2.1、Git HEAD 的作用一:显示当前所出于哪个分支
我们查看git提交日志的时候,会经常碰到head,如下所示:
1 |
|
如上所示,HEAD -> master
告诉我们当前处于 master 分支。
2.2、Git HEAD 的作用二:指代当前分支的最新提交的commit id
当我们进行新的提交时,HEAD会自动更新到最新的提交上。也就是说,HEAD始终指向当前分支的最新提交。这有助于我们跟踪代码变更并回溯到特定的提交。
有时候,我们commit提交代码后,发现这一次commit的内容是有错误的,面对这种情况有两种解决方法:
- 解决方法1:修改错误内容,再次commit一次
- 解决方法2:使用git reset命令撤销这一次错误的commit
此时,该head出场了,它常常与reset连用,如下所示:
1 |
|
因为head表示当前分支的最新提交的commit id,上述命令的目的是将文件file恢复到指定的commit id。