.git / HEAD的奇怪内容

时间:2014-08-21 05:37:38

标签: git

我刚刚克隆了一个包含一组不同分支的存储库。当我输入git branch时,它会给出:

$ git branch

* rel/next/master

本地克隆存储库中.git / HEAD的内容为:

* rel/next/master

通常,当我克隆存储库时,它总是在refs / heads / master上作为默认分支。以上是否意味着有人在某个时候手动改变了远程HEAD的值?或者git是否会以某种方式根据分支的名称自动计算默认/远程HEAD?

我已经读完了这个:

How does origin/HEAD get set?

并试图看看是否有必要修剪"暧昧的头脑,但这不是真的。

我想我可以在远程git repo上更改HEAD的内容。但我想知道它有可能首先具有这个价值

2 个答案:

答案 0 :(得分:3)

编辑:我不确定我是否回答了预期的问题(从那时起已经跟随了另一个问题的链接)。如果您想知道:远程回购的HEAD是如何变更以识别异常的(如果确实如此),答案取决于谁使用远程仓库以及如何使用远程仓库。如果远程存储库用于git checkout操作(例如,甚至从裸存储库部署内容),则可以通过结帐更新HEAD条目。


当您执行初始git clone时,指定一个-b的分支,然后git将其检出。

如果你没有指定一个-b的分支(大多数人不会),git仍会选择要检查的内容。 它选择了什么检查,有点棘手。

克隆后,您可以运行git ls-remote origin。你会看到这样的东西:

6c4ab27f2378ce67940b4496365043119d7ffff2        HEAD
32f56600bb6ac6fc57183e79d2c1515dfa56672f        refs/heads/maint
6c4ab27f2378ce67940b4496365043119d7ffff2        refs/heads/master
9eef2c89753895da807c936ff1ba3a255c8370c9        refs/heads/next
0c53c9308fc7349ea93fd96ce7bbff7a8d0dfa41        refs/heads/pu
3d84dcf9136e737c8a8d10b7954928df732dadca        refs/heads/todo

(这是刚刚在git存储库本身上运行git ls-remote)。请注意,HEAD列出了原始SHA-1,而不是符号引用,即使遥控器上的HEAD几乎肯定是符号引用(特别是refs/heads/master)。

您的本地git将此处的SHA-1与所有refs/heads/(分支)的SHA-1进行比较。如果只有一个匹配,就像这里的情况一样,它假设您希望检查跟踪相应远程分支的本地分支。

如果 more 比一个SHA-1匹配,git只选择其中一个。

如果没有匹配,我实际上并不确定git会做什么。

答案 1 :(得分:0)

如果它在github上,则"设置"中有一个字段。存储库的页面,用于将默认分支更改为您想要的任何内容。

如果它是人们通常克隆的常规裸仓库,您可以使用git symbolic-ref更新HEAD以指向您想要的任何引用,这将是默认分支人们在克隆存储库时得到的结果。