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

我对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分支。

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

我不知道为什么它不在Ubuntu系统上的存储库中。 也许你最初是从你的代码库(当origin是空的,因此没有HEAD的时候)从未更新过。

无论如何,拥有像HEAD / HEAD这样的东西在实践中并不是非常重要。

要回答你的另一个问题:如果你运行没有参数的git pull ,它实际上从远程获取所有东西( git fetch也是不带参数运行的,所以它只是获取所有内容)。 尽pipe如此,一切都没有得到合并。 只有远程跟踪分支( git branch -r的东西git branch -r )被更新。

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

通常, HEAD指向分支中最近的提交,因此工作副本中包含最新的文件。 使用git reset HEAD^你可以将指针移到上一个提交(即撤销本地副本中的最后一个提交)。

现在,每个git仓库都有一个HEAD ,用git show HEAD检查一下。 相应地, origin/HEAD是您远程origin/HEAD

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

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

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

现在应该走了:

 $ git branch -r origin/master