为何一个Git仓库显示origin/HEAD,另一个仓库却不显示?
为什么克隆的仓库有
origin/HEAD,而手动关联远程的原仓库没有? 咱们先把origin/HEAD的本质说清楚:它是一个符号引用,专门用来标记你关联的远程仓库(这里是origin)的默认分支——说白了就是远程仓库里当前被设为默认的那个分支(比如你这里的master)。
出现差异的原因完全在于两个仓库关联远程的方式不一样:
克隆的第二个仓库:当你执行
git clone命令时,Git会自动完成一整套流程:不仅帮你把远程仓库的代码拉到本地、关联好origin远程,还会主动从远程仓库获取它的HEAD指针信息,在本地创建origin/HEAD这个引用,用来告诉你“这个远程仓库的默认分支是啥”。这是git clone的默认行为,目的是让你一眼就能知道远程的默认分支指向哪里。手动关联的第一个仓库:你是先在本地建仓库、提交代码,再手动用
git remote add origin关联远程,然后推代码上去。这个过程里,Git不会主动去远程仓库拉取HEAD的信息,所以你的第一个仓库里就不会自动生成origin/HEAD这个引用。如果想要补上的话,你可以在第一个仓库里执行这条命令:git remote set-head origin -a执行后,Git会自动去远程获取默认分支信息,创建
origin/HEAD引用,之后再跑git log --decorate就能看到它了。
你也可以用git remote show origin命令验证:在第一个仓库里执行,会提示你可以用set-head命令设置origin/HEAD;在克隆的仓库里执行,会明确显示origin/HEAD -> origin/master(或者你远程的默认分支名)。
内容的提问来源于stack exchange,提问作者Mandroid




