前言

虽然我们使用Git很多年,但是仍然有很大一部分人对head没有清晰的认识。head属于隐藏于Git内部的东西,网上很多介绍head的文章也总是说不清道不明,而本文希望从表入里给大家说一下header,欢迎大家的评论和建议。

1、Git HEAD 存放位置

HEAD 指的就是 .git/HEAD 文件,它存储着当前分支的名字,我们可以打这个文件看一看:

ref: refs/heads/master

由此,我们可以得知当前所处于 master 分支。如果我们继续往下走:打开 refs/heads/master 文件,一串密码映入眼帘:

7e136f508b982790db5686482075c60ee3ee4fed

这是master分支上最新提交的commit id。

其实,我们可以看下面的这张示意图,对于header的理解将会一目了然:

2、Git HEAD 的作用

2.1、Git HEAD 的作用一:显示当前所出于哪个分支

我们查看git提交日志的时候,会经常碰到head,如下所示:

$ git log
commit c4f9d71863ab78cfca754c78e9f0f2bf66a2bd77 (HEAD -> master)

如上所示,HEAD -> master 告诉我们当前处于 master 分支。

2.2、Git HEAD 的作用二:指代当前分支的最新提交的commit id

有时候,我们commit提交代码后,发现这一次commit的内容是有错误的,面对这种情况有两种解决方法:

解决方法1:修改错误内容,再次commit一次

解决方法2:使用git reset命令撤销这一次错误的commit

此时,该head出场了,它常常与reset连用,如下所示:

$ git reset HEAD <file>

因为head表示当前分支的最新提交的commit id,上述命令的目的是将文件file恢复到指定的commit id。

扩展阅读:关于reset的用法,大家可以移步:《git reset 命令详细介绍》

3、Git HEAD 小结

平心而论,Git HEAD 的设计思想有点混乱,它即可以指代当前分支,也可以指代当前分支的最新提交,而当前分支与最新提交本是两个不同层面的概念。针对这种混乱的情况,大家要具体事情具体分析。Git HEAD 的设计思想来源于C/C++语言中的指针,后者即可以指代数组,也可以指代数组的第一个元素。凡是出现指针的地方,都应该小心行事,面对Git HEAD,亦是如此。

4、参考

《Git入门教程》。这是一个不错的入门教程,值得分享给大家。这个教程参考Git官方文档以及网上众多Git技术博客而成,从浅入深,分析透彻,值得Git初学者和Git中级用户学习和参考。

标签: none

[网站公告]-[2024年兼职介绍]


添加新评论