Git分支命名为origin / HEAD - >产地/主

时间:2010-12-05 13:47:13

标签: git

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

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

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

tauren@ubuntu:/projects$ git branch -r
  origin/accounting
  origin/master
  origin/organizations
  origin/superstar

然后我切换到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

所以我的问题是这些:

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

3 个答案:

答案 0 :(得分:40)

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

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

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

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

答案 1 :(得分:9)

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

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

现在,每个git仓库都有HEAD,请使用git show HEAD进行检查。因此,origin/HEAD是您HEAD遥控器的origin

现在,我发现了一个很好的问题,描述了HEADWhat is HEAD in Git?

答案 2 :(得分:4)

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

  1. 导航到您的存储库
  2. 执行:git remote set-head origin -d
  3. 现在它应该消失了:

    $ git branch -r
    origin/master