当你运行
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,因为基本上有,没有工作副本。不是这样吗?
@robinst 是正确的。
在 git 中,您可以选择默认检出哪个分支(即当您克隆时)。默认情况下,
origin/HEAD
将指向该位置。
在 GitHub 上,您可以在 GitHub 存储库的管理设置中更改此设置。您也可以通过命令行执行此操作
git remote set-head origin trunk
或通过
完全删除它
git remote set-head origin -d
示例。查看“切换分支”下拉菜单。 trunk
已选中,因此
origin/HEAD
位于
trunk
之后。
通常,HEAD 指向 master,这是人们克隆存储库时检出的分支。将其设置到另一个分支(通过在裸存储库中编辑 HEAD)会导致该分支在克隆时被签出。
我的印象是 专用远程存储库(例如 GitHub 没有人会通过 ssh 登录并工作 该代码,但只能拉或推等) 没有也不应该有 HEAD 因为基本上没有 工作副本。不是这样吗?我的印象和你说的一模一样。
我什至无法删除从 github 克隆的 origin/HEAD 远程跟踪分支
git branch -d -r origin/HEAD
这没有效果。有人可以告诉我如何删除该 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 作为分支列表的一部分,即使“它没有多大意义......”
示例:
$ 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”这一行。这是远程存储库让客户端知道默认检查哪个分支的地方。
指向到远程存储库上当前签出的分支(可能是也可能不是主分支)。即使远程存储库也有当前分支。通常它是master,我想不出任何理由要改变它,但它可以改变。
“当你运行 gitbranch -r 时,为什么 blazes 会列出 origin/HEAD?例如,GitHub 上有一个远程存储库,有两个分支:master 和 Awesome-feature。如果我执行 git clone 来获取它并然后进入我的新目录并列出分支,我看到这个:
$ git 分支 -r 原点/头部 起源/主人 起源/很棒的功能” 结束报价。 Marshall头用于放大git(tar) Marshall 放大器头具有主音量和出色的功能。
我是通过查找头部信息来到这里的...所以???
git push origin HEAD