You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

为何一个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

火山引擎 最新活动