Git分支命名为origin/HEAD - > origin/master

Tau*_*ren 44 git

我对Git很新,但仍然掌握它.我刚刚开始与分支机构合作,并遇到了一些问题.

我有两个开发系统,一个是Ubuntu桌面和一个MacBookPro.我organizations在Ubuntu系统的一个新分支上做了很多工作,并执行了提交并推送到我的远程仓库.在这一点上,我有这些分支:

tauren@ubuntu:/projects$ git branch
  accounting
  master
* organizations

tauren@ubuntu:/projects$ git branch -r
  origin/accounting
  origin/master
  origin/organizations
  origin/superstar
Run Code Online (Sandbox Code Playgroud)

然后我切换到MBP拉新分支:

tauren@osx:/projects$ git branch
  accounting
* master

tauren@osx:/projects$ git branch -r
  origin/HEAD -> origin/master
  origin/accounting
  origin/master
  origin/superstar

tauren@osx:/projects$ git pull
   2e20a14..ef35730  accounting -> origin/accounting
   271a1a5..7e947ab  master     -> origin/master
 * [new branch]      organizations -> origin/organizations

tauren@osx:/projects$ git branch
* accounting
  master

tauren@osx:/projects$ git branch -r
  origin/HEAD -> origin/master
  origin/accounting
  origin/master
  origin/organizations
  origin/superstar
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  1. 为什么MBP有一个分支origin/HEAD -> origin/master,但Ubuntu系统没有?那个分支是什么?
  2. 是否会git pull自动拉出所有新的远程分支?我以为我必须告诉它要拉的新分支的名称.如您所见,它在命令上拉出了远程organizations分支git pull.

Jan*_*ger 42

HEAD通常指向当前签出的分支.在托管(裸)存储库中,它指定默认分支,即克隆存储库时检出的分支.因此,origin/HEAD会告诉您默认的原始分支.

我不知道为什么它在Ubuntu系统的存储库中不存在.也许你最初是从那个存储库推送你的代码(当原点是空的,因此还没有HEAD)并且从未更新它.

无论如何,拥有像origin/HEAD这样的东西在实践中并不是非常重要.如果你愿意,你可以使用git remote set-head origin -aorigin/HEAD创建/更新

回答你的另一个问题:如果你git pull没有参数运行,它实际上从远程获取所有东西(git fetch没有参数运行,所以它只是获取一切).但是,一切都没有合并.仅git branch -r更新远程跟踪分支(内容).

  • 哦,我忘了提一下:你可以使用`git remote set-head origin -a`来创建/更新origin/HEAD. (6认同)
  • `git remote set-head`的[documentation](http://www.kernel.org/pub/software/scm/git/docs/git-remote.html)有助于理解例如`origin/head的目的HEAD`. (2认同)

uli*_*tko 9

据我所知,HEAD不是分支,而是指向历史树节点的指针(即提交).驻留在您特定工作副本中的文件具有所描述的状态HEAD.

通常HEAD指向分支中的最新提交,因此您在工作副本中拥有最新的文件.使用git reset HEAD^您可以将指针移动到上一次提交(即撤消本地副本中的最后一次提交).

现在,每个git repo都有一个HEAD,检查一下git show HEAD.因此,origin/HEADHEAD你的origin遥控器.

现在,我发现了一个很好的问题HEAD:Git中的HEAD是什么?


Gab*_*iel 8

如果您愿意,它只是一个指向 master 的指针,一个符号链接。您可以通过在终端(或 Windows 用户的 git bash/cygwin)中执行以下操作来安全地删除它:

  1. 导航到您的存储库
  2. 执行: git remote set-head origin -d

现在它应该消失了:

$ git branch -r
origin/master
Run Code Online (Sandbox Code Playgroud)