2012-10-08 163 views
0

我已经使用git克隆了一个repo。另一个用户创建了一个新的分支,称它为foo(有两个分支master和foo)。我创建了另一个分支foo来跟踪远程foo。所以我跑了这个命令:git branch --set-upstream foo origin/foo。但我有一个错误消息告诉我:fatal: Not a valid object name: 'origin/foo'任何人都可以帮忙吗?当我运行git remote origin show时,我有这样的信息:跟踪一个git分支问题

* remote origin 
    Fetch URL: ssh://*** 
    Push URL: ssh://*** 
    HEAD branch: foo 
    Remote branches: 
    master tracked 
    foo new (next fetch will store in remotes/origin) 
    Local branch configured for 'git pull': 
    master merges with remote master 
    Local ref configured for 'git push': 
    master pushes to master (local out of date) 

回答

2

您必须首先将分支提取到您的本地回购站。

git fetch origin 
# OR 
git pull origin 

之后,你可以检出foo

git checkout foo 

而且,你可以使用你写的跟踪起源/ foo的另一个地方分支的名字在上面的命令(把你的电话,刚结帐的无论如何你都使用相同的名字)。

Git远程只能在某处你可以推/推变化。但实际上,git所做的一切都是在本地驱动器上进行的,因此除非先将它们提取到本地区域,否则无法与远程分支交互。 origin/foo只是您在本地保存的sha-1提交ID上的标签。当您使用origin/foo时,引用本地标签,而不是远程状态(引用远程分支时没有建立ssh连接)。

+0

不错!顺便提一个问题:实际上,当我克隆一个回购时,我只拉动主分支。然后我需要运行你引用的命令来获得所有的远程分支,(那么我可以跟踪它们),对吧? – Newben

+1

不,当你克隆时,你会得到所有分支。因为它是DVCS(分布式版本控制系统),所以您总是克隆完整的git存储库。尽管如此,如果一个程序员有一个本地分支,而他没有推送到远程,那么这个分支将远远不够(除非你使用他的本地回购作为远程分支)。 –