【问题标题】:Why is there a `remotes/origin/HEAD -> origin/master` entry in my `git branch -l -a` output?为什么在我的 `git branch -l -a` 输出中有 `remotes/origin/HEAD -> origin/master` 条目?
【发布时间】:2012-09-18 18:59:12
【问题描述】:

我不明白输出到git branch -l -a 的第二行:remotes/origin/HEAD -> origin/master

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

这是另一个操作的剩余部分吗?我应该清理它吗?我该怎么做?

我通常在 cli 上使用 git,但在这个本地存储库中,我尝试使用 TortoiseGit 为朋友找到一个简单的 git 工作流程。

【问题讨论】:

标签: git branch


【解决方案1】:

不,不需要清理:它是远程仓库引用的符号分支。
当你克隆你的 repo 时,默认情况下你会在 remotes/origin/HEAD 引用的分支上。

另见:

注意:在 2.20 之前的 Git 版本上,您需要 use git branch --list (or git branch), not git branch -l

【讨论】:

  • 感谢简洁的答案和链接。我想我很困惑,因为我将此测试 repo 与另一个没有 remotes/origin/HEAD 参考的 repo 进行了比较。另一个 repo 是我推送到 github 的原始 repo,因此从未被克隆。这(没有被克隆)是它不包含 HEAD 引用的原因是否正确?
  • 如果您确实想删除它:git remote set-head origin -d,每 stackoverflow.com/a/6838756
  • 第二支和第三支有什么区别?
  • @Goldname 第二个分支不是分支,而是指向分支的符号指针(HEAD)。它引用克隆远程存储库时将检出的默认分支。
  • @Goldname 因为分支是指向最近提交的指针,它本身引用了过去提交的历史记录。每当您获取时,您都会获得所有新提交,并将 remotes/origin/master 更新为这些新提交中的最新。了解更多关于分支:stackoverflow.com/a/51224861/6309,关于获取:stackoverflow.com/a/28341622/6309stackoverflow.com/a/23530333/6309
【解决方案2】:

您可以使用git remote set-head origin -d 删除origin/HEAD 符号引用,或使用git remote set-head origin -a 查询远程并自动将origin/HEAD 指针设置为远程的当前分支。

origin/HEAD 引用是可选的。它仅作为一种语法快捷方式:如果它存在并指向origin/master,您可以简单地使用具体的origin,否则您将指定origin/master

git remote(1) 手册页对此进行了描述:

定头

设置或删除默认分支(即 symbolic-ref refs/remotes//HEAD) 用于命名远程。有一个 远程的默认分支不是必需的,但允许 要指定的远程代替特定分支。例如, 如果 origin 的默认分支设置为 master,则 origin 可能是 在您通常指定 origin/master 的任何位置指定。

【讨论】:

  • 是否可以调用git branch -l -a 或类似方法,并过滤掉 HEAD 和其他符号引用?
  • 你可以使用git branch --list -a | grep -v ' -> '
  • 当然,但是这种破解非常不可靠。如何知道所有“例外”...
猜你喜欢
  • 2013-09-25
  • 2017-12-07
  • 2012-05-22
  • 2021-03-29
  • 2011-05-20
  • 2021-03-07
  • 2019-07-31
  • 2012-01-02
相关资源
最近更新 更多