我刚刚克隆了一个包含一组不同分支的存储库。当我输入git branch
时,它会给出:
$ git branch
* rel/next/master
本地克隆存储库中.git / HEAD的内容为:
* rel/next/master
通常,当我克隆存储库时,它总是在refs / heads / master上作为默认分支。以上是否意味着有人在某个时候手动改变了远程HEAD的值?或者git是否会以某种方式根据分支的名称自动计算默认/远程HEAD?
我已经读完了这个:
并试图看看是否有必要修剪"暧昧的头脑,但这不是真的。
我想我可以在远程git repo上更改HEAD的内容。但我想知道它有可能首先具有这个价值
答案 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
以指向您想要的任何引用,这将是默认分支人们在克隆存储库时得到的结果。