当您运行git branch -r
为什么火焰会列出origin/HEAD
?例如,GitHub上有一个远程仓库,比如说有两个分支:master和awesome-feature。如果我git clone
抓住它然后进入我的新目录并列出分支,我看到了:
$ git branch -r
origin/HEAD
origin/master
origin/awesome-feature
或者它的任何顺序(阿尔法?我正在伪造这个例子以保持无辜的回购秘密的身份)。那么HEAD
业务是什么?它是push
的最后一个人在他们推动时HEAD
指出的是什么?他们push
编辑的不一样吗? HEAD
四处走动......为什么我关心别人HEAD
在另一台机器上指出的是什么?
我只是处理远程跟踪等问题,所以这是一个挥之不去的混乱。谢谢!
编辑:我的印象是专用远程存储库(比如GitHub,没有人会在这个代码中进行操作,但只有拉或推等)没有也不应该有一个HEAD,因为有,基本上,没有工作副本。不是吗?答案 0 :(得分:127)
@robinst 是正确的。
在git中,您可以选择默认签出的分支(即克隆时)。默认情况下,origin/HEAD
将指向该位置。
在GitHub上,您在GitHub仓库的管理员设置中为You can change this。您也可以从命令行通过
执行此操作git remote set-head origin trunk
或通过
完全删除它git remote set-head origin -d
Example。查看“切换分支”下拉列表。已选中trunk
,因此origin/HEAD
跟在trunk
之后。
答案 1 :(得分:56)
裸存储库可以拥有HEAD的原因是因为它确定在克隆存储库后最初检出哪个分支。
通常,HEAD指向master,这是人们克隆存储库时检出的分支。将其设置为另一个分支(通过编辑裸存储库中的HEAD)会导致在克隆时检出该分支。
答案 2 :(得分:23)
我的印象是 专用远程回购(如GitHub 没有人会在这里工作 那个代码,但只有拉或推等) 没有也不应该有一个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>
希望这可以提供帮助。 :)
答案 3 :(得分:13)
你是正确的推送专用远程回购工作,当他们'裸'时,就是当他们没有工作目录时更好。 Git的体系结构旨在通过补丁或pull
(fetch
)进行更新,这在分布式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
(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作为分支列表的一部分,即使“它并不意味着......”
答案 4 :(得分:3)
如果“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 branch:master”的行。这是远程存储库允许客户端在默认情况下知道要检出的分支的位置。
答案 5 :(得分:2)
总是有一个HEAD 指向到远程仓库上当前已检出的分支(可能是也可能不是主分支)。甚至远程存储库也有当前的分支。通常它是主人,而且我无法想到为什么人们想要改变它,但它可以改变。
答案 6 :(得分:-9)
我的猜测是有人推了一个分支并称之为HEAD:
git push origin HEAD