我对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
所以我的问题是这些:
origin/HEAD -> origin/master
,但Ubuntu系统没有?那是什么分支?git pull
会自动拉出所有新的远程分支吗?我以为我必须告诉它要拉的新分支的名称。如您所见,它在命令organizations
上拉出了远程git pull
分支。答案 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
。
现在,我发现了一个很好的问题,描述了HEAD
:What is HEAD in Git?
答案 2 :(得分:4)
它只是一个指向master的指针,如果你愿意,它是一个符号链接。您可以通过在终端中执行以下操作(或对于Windows用户使用git bash / cygwin)安全地删除它:
git remote set-head origin -d
现在它应该消失了:
$ git branch -r
origin/master