考虑以下情况:
$ git remote show origin
* remote origin
Fetch URL: /var/origin.git
Push URL: /var/origin.git
HEAD branch: master
Remote branches:
master tracked
test new (next fetch will store in remotes/origin)
Local refs configured for 'git push':
master pushes to master (up to date)
现在我想拉那个遥控测试'科。所以我试试这个:
$ git checkout --track origin/test
fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/test' which can not be resolved as commit?
其他人说要解决这个问题,我只需要做一下“git pull'”。这不是我拉的正常方式。我通常做的是git pull origin master'。如果我尝试,会发生什么:
$ git pull
fatal: Where do you want to fetch from today?
这里有些致命的错误。我只想跟踪/获取远程分支,以便我可以进行编辑并将其推回。我需要做些什么才能实现这一目标?
答案 0 :(得分:0)
您只需先运行git fetch origin
。
git remote show
连接到相关的遥控器并查询它,la git ls-remote
(您也应该尝试将其视为正常运行 - 与git remote show
一样只会环顾四周,并没有触及任何东西):
$ env GIT_TRACE=1 git remote show origin
trace: built-in: git 'remote' 'show' 'origin'
trace: run_command: 'ssh' 'host' 'git-upload-pack '\''path'\'''
* remote origin
...
当git remote show
打印"远程分支"在这一点上,它告诉你在有问题的遥控器上存在哪些分支(作为本地分支"在那里")。除了这些信息之外,它还会告诉您您的存储库(#34;在这里"而不是在另一台主机上)是否有副本远程的想法那些分支。上面显示你的git 知道他们的git' master
,即你有origin/master
; 1 但是你的git 尚未知道他们的git' test
,即 origin/test
。
理论上,你的git 可以更新他们的git所拥有的想法"在那里"现在:毕竟,它刚刚被发现了。它也可以在您运行git ls-remote
时执行此操作。但它没有:它的git fetch
指示你的git从他们的git中获取新信息并将其保存在你身边。 show
和ls-remote
操作只会让您知道git fetch
可以做什么;他们实际上并没有这样做。
括号中的(next fetch will store in remotes/origin)
告诉您,如果您运行git fetch
,您的git将与其git同步,并且假设您运行git remote show
和实际运行的时间git fetch
- 获取remotes/origin/test
。
1 此引用的全名是refs/remotes/origin/master
,但可以缩写为origin/master
或remotes/origin/master
。 Git对它使用的缩写并不十分一致,只是如果名称变得模糊不清,它往往会使用更长,更明确的版本。另请参阅the gitrevisions
documentation。
答案 1 :(得分:0)
解决。
git pull -u origin master
执行此命令后,我仍然无法执行git pull
。
git push -u origin master
执行此命令后,我现在可以执行git pull
并按照我的意愿结帐分支。