我的机器1带有git repo client
,它有分支master
和fixes_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)
答案 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以解决这样一个基本步骤。谢谢大家。