【问题标题】:Git branch named origin/HEAD -> origin/masterGit 分支名为 origin/HEAD -> origin/master
【发布时间】:2011-05-20 12:50:13
【问题描述】:

我对 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 会自动拉取所有新的远程分支吗?我想我必须告诉它要拉的新分支的名称。如您所见,它在命令git pull 上拉取了远程organizations 分支。

【问题讨论】:

    标签: git


    【解决方案1】:

    HEAD 通常指向当前签出的分支。在托管(裸)存储库中,它指定默认分支,即克隆存储库时签出的分支。所以,origin/HEAD 会告诉你默认的起源分支。

    我不知道为什么它没有出现在 Ubuntu 系统的存储库中。也许您最初从该存储库推送您的代码(当 origin 为空,因此还没有 HEAD 时)并且从未更新它。

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

    回答您的另一个问题:如果您不带参数运行git pull,它实际上会从远程获取所有内容(git fetch 也可以不带参数运行,因此它只会获取所有内容)。但是,一切都没有合并。仅更新远程跟踪分支(git branch -r 中的内容)。

    【讨论】:

    • 哦,我忘了说:你可以使用git remote set-head origin -a 来创建/更新origin/HEAD。
    • documentation for git remote set-head 有助于理解例如origin/HEAD.
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 10年过去了,分支也是指针还是真的!
    【解决方案3】:

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

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

    现在它应该消失了:

    $ git branch -r
    origin/master
    

    【讨论】:

      猜你喜欢
      • 2012-05-22
      • 2012-07-26
      • 2020-07-27
      • 2012-01-31
      • 2012-01-02
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多