为什么git fetch远程分支总是给我主人?

时间:2012-06-19 21:21:29

标签: git branch

我的机器1带有git repo client,它有分支masterfixes_v3。我有机器2,无论我尝试什么组合,它都会拉出一个分支,并将其命名为fixes_v3但内容为master。 e.g:

git clone git+ssh://user@machine1/home/user/client给了我这个

git pull给了我这个

git branch -a然后checkout远程fixes_v3给了我

git fetch给了我这个

除了这些东西的各种其他组合,经常重新开始,从各种SO问题,手册,官方文档等汇总。我甚至不知道从哪里开始研究这个,而不必从头学习git第n次。

如何获取fixes_v3中的代码而不仅仅是一个名称不正确的分支fixes_v3

编辑请求的输出:

um@machine2:~/client$ git show-ref
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63 refs/heads/fixes_v3
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63 refs/heads/localfixesv3
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63 refs/remotes/origin/HEAD
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63 refs/remotes/origin/fixes_v3
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63 refs/remotes/origin/version3
um@machine2:~/unrollclient$ git ls-remote origin
um@machine1 password: 
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63    HEAD
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63    refs/heads/fixes_v3
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63    refs/heads/version3
7bd4490e8f98d29c5e82f473d1b04e542b67dec0    refs/remotes/origin/HEAD
16c7b55e2ea3e26c2f8faccd43e1c0db9620008a    refs/remotes/origin/Testing
a7a5642f6766332910c2c9005e8aafaf456f1f58    refs/remotes/origin/john
7bd4490e8f98d29c5e82f473d1b04e542b67dec0    refs/remotes/origin/master
ae10bcf7e15a4e251b50e8bc2eae3e5a2bc25b63    refs/remotes/origin/version3
um@machine2:~/client$ git remote show origin
um@machine1's password: 
* remote origin
  Fetch URL: git+ssh://um@machine1/home/um/client
  Push  URL: git+ssh://um@machine1/home/um/client
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    fixes_v3
    version3
  Remote branches:
    fixes_v3 tracked
    version3 tracked
  Local branches configured for 'git pull':
    fixes_v3     merges with remote fixes_v3
    localfixesv3 merges with remote fixes_v3
  Local ref configured for 'git push':
    fixes_v3 pushes to fixes_v3 (up to date)

2 个答案:

答案 0 :(得分:1)

从原始仓库获取远程分支fixes_v3

git fetch origin fixes_v3

创建分支

git checkout -b myLocalFixes_v3 origin/fixes_v3

应该做的伎俩

解释你在做什么

git clone git+ssh://user@machine1/home/user/client

您在本地克隆了repo,默认情况下,您的本地仓库将在远程仓库的HEAD修订版中签出。默认为master

git pull 

Git pull(没有选项)将获取然后将默认跟踪分支合并到当前分支上。由于您是本地主机,它是由远程主分支发起/跟踪的,因此它将获取(在缓存中下载)远程主分支,然后将其合并到您当前的主分支上。

git branch -a then checkout the remote fixes_v3 gives me this

结账是棘手的部分。我给你的结帐应该工作。我过去也做错了结账,因为我没有得到所有细微之处。如果你这样做

git checkout -b origin/fixes_v3

它将创建一个名为“origin / fixes_v3”的本地分支,它基于主

git checkout -b origin/fixes_v3 master

同样在这里

git checkout -b origin/fixes_v3 origin/fixes_v3

它将创建一个名为“origin / fixes_v3”的本地分支,它基于origin / fixes_v3远程“fixes_v3”。你不应该这样做,因为git在找出“origin / fixes_v3”之后会有问题:远程分支,或者以“/”命名的本地分支?

git fetch

Git fetch仅下载本地缓存中的远程分支/提交。它什么都不做,没有合并,没有结账,也没有反转。

如果您的远程名称是:origin,它将下载.git / refs / remotes / origin /目录中的缓存(我简化) 所以你将拥有.git / refs / remotes / origin / master和.git / refs / remotes / origin / fixes_v3。 当你做一个git checkout -b origin / fixes_v3 origin / fixes_v3 它将基于.git / refs / remotes / origin / fixes_v3创建一个.git / refs / head / origin / fixes_v3,但是你会在名字中产生冲突,因为如果origin / fixes_v3表示远程就是origin remote,或名为origin / fixes_v3的本地分支

答案 1 :(得分:0)

问题竟然比我想象的更笨。 fixes_v3分支的更改未提交...在重新阅读git pro指南后,我能够很好地理解git以解决这样一个基本步骤。谢谢大家。