当你跑步时 git branch -r 为什么会列出大火 origin/HEAD?例如,GitHub 上有一个远程存储库,有两个分支:大师和很棒的功能。如果我做 git clone 抓住它,然后进入我的新目录并列出分支,我看到这个:

$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature

或者无论它的顺序是什么 (alpha?我伪造这个例子是为了保密无辜回购协议的身份)。那么什么是 HEAD 商业?这是最后一个人做的吗 push 有他们的 HEAD 当他们推动时指出?不管他们是什么,那不是永远都是这样吗? push编辑? HEAD四处走动...我为什么要关心别人的 HEAD 指向另一台机器?

我刚刚掌握了远程跟踪等方面的知识,所以这是一个挥之不去的困惑。谢谢!

编辑:我的印象是,专用的远程存储库(例如 GitHub,没有人会通过 ssh 登录并处理该代码,而只能拉或推等)没有也不应该有 HEAD,因为基本上没有工作复制。不是这样吗?

有帮助吗?

解决方案

@罗宾斯特 是正确的。

在 git 中,您可以选择默认签出哪个分支(即当你克隆时)。默认情况下, origin/HEAD 会指出这一点。

在 GitHub 上, 你可以改变这个 在 GitHub 存储库的管理设置中。您还可以通过命令行执行此操作

git remote set-head origin trunk

或通过以下方式完全删除它

git remote set-head origin -d

例子. 。查看“切换分支”下拉菜单。 trunk 被检查,所以 origin/HEAD 如下 trunk.

其他提示

裸存储库可以有 HEAD 的原因是,它确定在克隆存储库后最初检出哪个分支。

通常,HEAD 指向 master,这是人们克隆存储库时检出的分支。将其设置到另一个分支(通过在裸存储库中编辑 HEAD)会导致在克隆时检出该分支。

我的印象是专门的远程存储库(例如,没有人会介入并使用该代码的Github,但只能拉或推动等)没有并且不应该有头,因为基本上没有工作复制。不是这样吗?

我和你说的印象一模一样。

我什至无法删除从 github 克隆的 origin/HEAD 远程跟踪分支

git branch -d -r origin/HEAD

这没有效果。

有人可以告诉我如何删除该 origin/HEAD 远程跟踪分支吗?

更新

虽然我没有找到为什么从github克隆时会创建origin/HEAD,但我找到了删除它的方法。

新版本的git提供

git remote set-head <name> -d

删除远程跟踪分支无用的HEAD指针。

我们还可以通过使用将愚蠢的默认名称“origin”更改为我们想要的任何名称

git remote rename origin <new_name>

希望这能有所帮助。:)

你说得对 推动到 专用远程存储库在“裸露”状态(即没有工作目录)时工作得更好。Git 的架构是为通过补丁或更新而设计的 pull (fetch),这在分布式 VCS 中是有意义的。正如文档在某处所说,推送到当前已签出的分支可能会导致 “意想不到的结果”.

HEAD 是有效存储库的要求的一部分。 Git 存储库布局 部分说:

HEAD

A symref (see glossary) to the refs/heads/ namespace describing the currently active  
branch. It does not mean much if the repository is not associated with any working tree  
(i.e. a bare repository), but a valid git repository must have the HEAD file; some  
porcelains may use it to guess the designated "default" branch of the repository  
(usually master). It is legal if the named branch name does not (yet) exist.

因此,您将看到 HEAD 作为分支列表的一部分,即使“它没有多大意义......”

如果“origin”是远程存储库,则 origin/HEAD 标识该远程存储库上的默认分支。

例子:

$ git remote show
origin
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:walkerh/pipe-o-matic.git
  Push  URL: git@github.com:walkerh/pipe-o-matic.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (fast-forwardable)

请注意“HEAD 分支:掌握”。这是远程存储库让客户端知道默认检查哪个分支的地方。

总有一个 HEAD 到远程仓库上当前签出的分支(可能是也可能不是主分支)。即使远程存储库也有当前分支。通常它是主控,我一时想不出任何理由要改变它,但它是可以改变的。

我的猜测是有人推了一个分支并将其称为 HEAD:

git push origin HEAD
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top