Git 中 HEAD 是什么东西,为什么会出现在分支里?

如题,但是这个分支实际上又是不存在的。

请输入图片描述

阅读 69.2k
8 个回答

说简单一点,HEAD 就是当前活跃分支的游标。形象的记忆就是:你现在在哪儿,HEAD 就指向哪儿,所以 Git 才知道你在那儿!

不过 HEAD 并非只能指向分支的最顶端(时间节点距今最近的那个),实际上它可以指向任何一个节点,它就是 Git 内部用来追踪当前位置的东东。

我回答的不严谨,只是为了简要的让你知道个大概,更具体的去看看官方的手册吧。

下面我的打开可能和大神廖雪峰的教程不一样,但我还是要说下我试验的结果。

HEAD默认指向指向当前分支的最新提交,比如我的master分支上有3次提交(将其分别打上标签one,two,three),这时最新提交是three,所以HEAD就指向three,可以用git reset <commitId/tag/HEAD>重置HEAD的指向,例如当我执行git reset two后,这时HEAD就指向two。平时我们不要乱改HEAD的指向,应为很多命令都是以HEAD的指向为标准的,下图以git log命令作了一个说明。

clipboard.png

详细分析见这里

current指针

转载 http://stackoverflow.com/questions/2304087/what-is-head-in-git 上的回答 翻译有误请轻轻吐槽

你可以认为 HEAD(大写)是"current branch"(当下的分支)。当你用git checkout切换分支的时候,HEAD 修订版本重新指向新的分支。有的时候HEAD会指向一个没有分支名字的修订版本,这种情况叫”detached HEAD“

head(小写)是commit对象的引用,每个head都有一个名字(分支名字或者标签名字等等),但是默认情况下,每个叫master的repository都会有一个head, 一个repository可以包含任意数量的head。在任何时候,只要这个head被选择成为”current head“,那么这个head就成了HEAD,总是大写

新手上路,请多包涵

概念上就是@nightire 所说的了, 至于HEAD出现在分支列里,可以理解为桌面上创建一个快捷方式指向QQ图标的快捷方式,看起来和QQ图标是是两个东西,其实指向的都是安装目录下的qq.exe。

学习 GIT 推荐 廖雪峰老师的GIT教程

摘抄其中的一段:

HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

楼上都说了,我加一句 HEAD 就是你当前的工作目录所处的位置,可以用 checkout 命令改变 HEAD 指向的位置。注意 HEAD 不一定指向一个分支,也可以指向一个 commit

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏