删除并再次添加远程存储库后 "git branch" 输出的差异

Differences in "git branch" output after removing and adding again remote repository

当我从远程仓库克隆一些项目,然后制作 git branch -a.

我得到了:

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

然后,如果我删除远程存储库并再次添加它:

$ git remote remove origin
$ git remote add origin username@server:/path/to/repository.git
$ git branch -u origin/master master

我期待类似的结果,但得到不同的输出:

$ git branch -a
* master
  remotes/origin/master

这种差异从何而来,意味着什么?手动远程添加后如何实现相同的输出?

我希望在 cat .git/config 中看到一些差异,但两种情况下的输出相同。

remotes/origin/HEAD 与符号 link 非常相似(过去它确实是一个 symlink,但他们必须对其进行更改)。当您 git clone 存储库时,分支 link 也 HEAD 将被签出。

Github 和其他此类服务通常会提供一个管理员 UI 来修改此 HEAD link 以便您可以将 master 以外的分支设置为默认结帐分支。但您也可以使用此命令通过命令行执行此操作。

git remote set-head origin master

这会将您的 git branch -a 输出恢复到克隆时的状态。

还可以设置其他符号引用如foo

git symbolic-ref refs/remotes/origin/foo refs/remotes/origin/master

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/foo -> origin/master
  remotes/origin/master

除了 HEAD 之外,我从未见过使用 sym-refs,但我可以想象在很多情况下这可能很方便(即,如果您有一个自动部署到设备测试实验室,如果您的开发团队四处走动,只需要一个参考就好了)