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
所以我的问题是这样的:
- 为什么MBP有分支
origin/HEAD -> origin/master
,但是Ubuntu系统没有? 那个分支是什么? -
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)中执行以下操作来安全地删除它:
- 导航到您的存储库
- 执行:
git remote set-head origin -d
现在应该走了:
$ git branch -r origin/master