Git 什么是「;克隆存储库&x27;“s当前活动的分支机构”;

Git 什么是「;克隆存储库&x27;“s当前活动的分支机构”;,git,github,dvcs,Git,Github,Dvcs,我已经成功地使用Git两年了(也许这是一个乐观的评价),但不可否认,我一直在盲目地使用Git。无论出于何种原因,我开始对内部结构更加好奇,最近一直在深入研究远程跟踪分支。总的来说,它们是有道理的,但我还有一个问题: 克隆存储库并创建所有远程跟踪分支时,“克隆存储库的当前活动分支”是什么(引用自git clone文档) 如果我是从同事的存储库克隆,我想这将是在git branch结果中前面有*的本地分支的跟踪分支,但是如果我是从Github克隆呢?是否只是我在界面中选择的分支?初步测试表明情况并非

我已经成功地使用Git两年了(也许这是一个乐观的评价),但不可否认,我一直在盲目地使用Git。无论出于何种原因,我开始对内部结构更加好奇,最近一直在深入研究远程跟踪分支。总的来说,它们是有道理的,但我还有一个问题:

克隆存储库并创建所有远程跟踪分支时,“克隆存储库的当前活动分支”是什么(引用自
git clone
文档)

如果我是从同事的存储库克隆,我想这将是在
git branch
结果中前面有*的本地分支的跟踪分支,但是如果我是从Github克隆呢?是否只是我在界面中选择的分支?初步测试表明情况并非如此


谢谢。

Git存储库当前活动的分支是其头部指向的分支

在内部,HEAD只是一个位于存储库GIT_DIR(非裸存储库的
.GIT
目录或裸存储库顶部)顶部的文件。如果HEAD看起来像
ref:refs/some/thing
,则它被解释为对命名ref的(符号引用)(通常是
refs/heads/
下的分支)。如果HEAD包含对象名称(SHA-1)的40字节ASCII十六进制表示形式,则我们称其为“分离的HEAD”(因为它未“连接”到正常分支),其工作原理与正常分支类似(即,它与任何其他分支的工作原理相同)

正如您所设想的,
git branch
将显示当前活动的分支,前面有一个星号。这适用于常规(非裸)和裸存储库

在常规(非裸)存储库(具有工作树的存储库)中,通过正常使用git checkout自动维护HEAD:

裸存储库(通常用于服务器)没有工作树,因此git签出将无法工作。要更新裸存储库的头部,必须使用:

在这两种情况下,您都必须直接访问存储库才能更新HEAD以更改当前活动的分支。与大多数托管提供商一样,GitHub不提供对存储库的直接访问。然而,它确实提供了一个新的分支(他们称之为“默认分支”)。

有一些答案。
git checkout other-branch
# HEAD is now a symref to refs/heads/other-branch
git symbolic-ref -m 'new default branch' HEAD refs/heads/other-branch
# HEAD is now a symref to refs/heads/other-branch