Py学习  »  Git

对git头的质疑

Mandroid • 5 年前 • 1423 次点击  

我问这个问题是为了理解git的实现细节,所以我在技术方面可能是错的。

通过阅读git scm书籍,我了解HEAD可以指向一个分支(它本身就是一个指向提交的指针)。还有一个承诺。

所以头部可以指向两个不同类型的物体。

指针是否可以指向diff类型的对象(commit和branch似乎在层次结构方面没有连接)?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51459
 
1423 次点击  
文章 [ 1 ]  |  最新文章 5 年前
torek
Reply   •   1 楼
torek    6 年前

在技术上,但完全是具体的, HEAD 实际上是一个文件, .git/HEAD . 它包含:

  • 分支机构的名称,或
  • 提交的哈希ID。

什么时候? 头部 包含提交的哈希ID,仅此而已。Git称这种情况为 分离头 唯一可用的信息是提交的散列ID。

什么时候? 头部 包含分支的名称,但是,现在有两种方法可以询问Git:

  • 嘿,吉特,告诉我什么散列ID 头部 名字。 吉特看着 头部 ,看到它的名字 master ,然后看 主人 查看什么散列ID 主人 名字。这就是你问题的答案。

  • 或者, 嘿,吉特,告诉我哪个分支 头部 名字。 吉特看着 头部 ,看到它的名字 主人 ,并告诉你 主人 作为你问题的答案。

分行名称 始终只包含一个提交的哈希ID,因此如果 头部 包含分支名称,Git始终可以执行 头部 -通过执行这两个步骤来散列ID。什么时候? 头部 但是,包含原始哈希ID,如果试图询问Git所包含的分支名称,则会出现错误:

$ git checkout --detach master
HEAD is now at 83232e3864 The seventh batch
$ git symbolic-ref HEAD
fatal: ref HEAD is not a symbolic ref

或者,使用 git rev-parse --symbolic-full-name ,只是指纹 头部 :

$ git rev-parse --symbolic-full-name HEAD
HEAD

重新连接 头部 主人 使它们都产生分支名称:

$ git checkout master
Switched to branch 'master'
$ git symbolic-ref HEAD
refs/heads/master
$ git rev-parse --symbolic-full-name HEAD
refs/heads/master

所以就这样 头部 可以是分支名称或提交哈希,除非它只能是提交哈希。