我对Git很新,但仍然掌握它.我刚刚开始与分支机构合作,并遇到了一些问题.
我有两个开发系统,一个是Ubuntu桌面和一个MacBookPro.我organizations在Ubuntu系统的一个新分支上做了很多工作,并执行了提交并推送到我的远程仓库.在这一点上,我有这些分支:
tauren@ubuntu:/projects$ git branch
accounting
master
* organizations
tauren@ubuntu:/projects$ git branch -r
origin/accounting
origin/master
origin/organizations
origin/superstar
Run Code Online (Sandbox Code Playgroud)
然后我切换到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
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
origin/HEAD -> origin/master,但Ubuntu系统没有?那个分支是什么?git pull自动拉出所有新的远程分支?我以为我必须告诉它要拉的新分支的名称.如您所见,它在命令上拉出了远程organizations分支git pull.Jan*_*ger 42
HEAD通常指向当前签出的分支.在托管(裸)存储库中,它指定默认分支,即克隆存储库时检出的分支.因此,origin/HEAD会告诉您默认的原始分支.
我不知道为什么它在Ubuntu系统的存储库中不存在.也许你最初是从那个存储库推送你的代码(当原点是空的,因此还没有HEAD)并且从未更新它.
无论如何,拥有像origin/HEAD这样的东西在实践中并不是非常重要.如果你愿意,你可以使用git remote set-head origin -a已origin/HEAD创建/更新
回答你的另一个问题:如果你git pull没有参数运行,它实际上从远程获取所有东西(git fetch没有参数运行,所以它只是获取一切).但是,一切都没有合并.仅git branch -r更新远程跟踪分支(内容).
据我所知,HEAD不是分支,而是指向历史树节点的指针(即提交).驻留在您特定工作副本中的文件具有所描述的状态HEAD.
通常HEAD指向分支中的最新提交,因此您在工作副本中拥有最新的文件.使用git reset HEAD^您可以将指针移动到上一次提交(即撤消本地副本中的最后一次提交).
现在,每个git repo都有一个HEAD,检查一下git show HEAD.因此,origin/HEAD是HEAD你的origin遥控器.
现在,我发现了一个很好的问题HEAD:Git中的HEAD是什么?
如果您愿意,它只是一个指向 master 的指针,一个符号链接。您可以通过在终端(或 Windows 用户的 git bash/cygwin)中执行以下操作来安全地删除它:
git remote set-head origin -d现在它应该消失了:
$ git branch -r
origin/master
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35558 次 |
| 最近记录: |