为什么运行“gitbranch-r”时显示“origin/HEAD”?

问题描述 投票:0回答:8

当你运行

git branch -r
时,为什么它会列出火焰
origin/HEAD
?例如,GitHub 上有一个远程存储库,有两个分支:master 和 Awesome-feature。如果我执行
git clone
来获取它,然后进入我的新目录并列出分支,我会看到以下内容:

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

或者无论它的顺序是什么(alpha?我伪造这个例子是为了保密无辜回购协议的身份)。那么

HEAD
生意是什么呢?这是最后一个
push
的人在推动时用他们的
HEAD
指着的吗?那不是永远都是他们
push
编辑的吗?
HEAD
四处移动...为什么我要关心某人
HEAD
在另一台机器上指向的内容?

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

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

git version-control github
8个回答
166
投票

@robinst 是正确的。

在 git 中,您可以选择默认检出哪个分支(即当您克隆时)。默认情况下,

origin/HEAD
将指向该位置。

在 GitHub 上,您可以在 GitHub 存储库的管理设置中更改此设置。您也可以通过命令行执行此操作

git remote set-head origin trunk

或通过

完全删除它

git remote set-head origin -d

示例。查看“切换分支”下拉菜单。 trunk

 已选中,因此 
origin/HEAD
 位于 
trunk
 之后。


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

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


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

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

我什至无法删除从 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>
希望这能有所帮助。 :)


13
投票
你是对的,

推送到专用远程存储库在“裸露”时(即没有工作目录时)工作得更好。 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 作为分支列表的一部分,即使“它没有多大意义......”


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

示例:

$ git remote show origin $ git remote show origin * remote origin Fetch URL: [email protected]:walkerh/pipe-o-matic.git Push URL: [email protected]: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 分支:master”这一行。这是远程存储库让客户端知道默认检查哪个分支的地方。


1
投票
总有一个 HEAD

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


0
投票
我有 Origin 头(由 Marshall Amplification 制造) 如果你看你的第一篇文章,你会发现:引用

“当你运行 gitbranch -r 时,为什么 blazes 会列出 origin/HEAD?例如,GitHub 上有一个远程存储库,有两个分支:master 和 Awesome-feature。如果我执行 git clone 来获取它并然后进入我的新目录并列出分支,我看到这个:

$ git 分支 -r 原点/头部 起源/主人 起源/很棒的功能” 结束报价。 Marshall头用于放大git(tar) Marshall 放大器头具有主音量和出色的功能。

我是通过查找头部信息来到这里的...所以???


-16
投票
我的猜测是有人推了一根树枝并将其称为 HEAD:

git push origin HEAD
    
© www.soinside.com 2019 - 2024. All rights reserved.