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

当你运行git branch -r为什么它会列出origin/HEAD ? 例如,GitHub上有一个远程回购,比如两个分支:master和awesome-feature。 如果我做git clone来抓取它,然后进入我的新目录并列出分支,我看到这个:

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

或者它会在什么顺序(阿尔法?我​​伪造这个例子,以保持一个无辜的回购秘密的身份)。 那么HEAD业务是什么? 当他们推动时,最后一个push他们的人指着什么? 这不是总是他们push东西吗? HEAD移动…为什么我在乎别人的HEAD指向另一台机器?

我只是处理远程跟踪等,所以这是一个混乱的困惑。 谢谢!

编辑:我的印象是,专用的远程回购(像GitHub没有人会ssh和工作的代码,但只拉或推等)没有,也不应该有一个头,因为基本上,没有工作副本。 不是吗?

@robinst是正确的。

在git中,你可以select默认检出哪个分支(即克隆的时候)。 默认情况下, origin/HEAD将指向那个。

在GitHub上, 您可以在pipe理设置中为您的GitHub仓库进行更改 。 你也可以从命令行通过

 git remote set-head origin trunk 

或者通过完全删除它

 git remote set-head origin -d 

例子 。 看看“Switch Branches”下拉菜单。 trunk被检查,所以origin/HEAD跟随trunk

裸仓库可以有一个HEAD的原因是因为它确定了在仓库克隆之后最初检查哪个分支。

通常情况下,HEAD指向master,这是人们克隆版本库时签出的分支。 将其设置为另一个分支(通过编辑裸仓库中的HEAD)将导致该分支被克隆检出。

我的印象是,专用的远程回购(像GitHub没有人会ssh和工作的代码,但只拉或推等)没有,也不应该有一个头,因为基本上,没有工作复制。 不是吗?

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

而且我甚至不能删除从github克隆的origin / HEAD远程跟踪分支

 git branch -d -r origin/HEAD 

这没有效果。

有人可以告诉我如何删除原点/ HEAD远程追踪分支?

更新

虽然我没有find为什么从github克隆的时候创build了origin / HEAD,但我find了一个删除它的方法。

新版本的git提供

 git remote set-head <name> -d 

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

而且我们也可以将愚蠢的默认名字“origin”改成我们想要的任何东西

 git remote rename origin <new_name> 

希望这可以帮助。 🙂

你说得对,当他们没有工作目录的时候专门的远程回购工作就更好了。 Git的体系结构devise用于通过修补程序或pullfetch )进行更新,这在分布式VCS中是有意义的。 正如文档所说,推送到当前检出的分支可能会导致“意外的结果”

HEAD是有效存储库要求的一部分。 Git Repository Layout部分地说:

 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 (ie 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作为分支列表的一部分,即使“这不意味着太多…”

始终有一个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:

 git push origin HEAD