我对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

所以我的问题是:
  • MBP为什么有分支origin/HEAD -> origin/master,而Ubuntu系统没有?那是什么分支
  • git pull是否会自动拉出所有新的远程分支?我以为我必须告诉它要拉的新分支的名称。如您所见,它拉了comomand organizations上的远程git pull分支。
  • 最佳答案

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

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

    无论如何,拥有诸如origin / HEAD之类的东西在实践中并不十分重要。如果需要,可以使用git remote set-head origin -a创建/更新origin/HEAD
    回答另一个问题:如果不带参数运行git pull,它实际上会从远程获取所有内容(git fetch也可以不带参数运行,因此它只获取所有内容)。但是,一切都不会合并。仅更新远程跟踪分支(git branch -r中的内容)。

    09-04 19:14
    查看更多