0

我有 machine1 和 git repo client,它有分支masterfixes_v3. 我有 machine2,无论我尝试什么组合,它都会拉出一个分支并命名它,fixes_v3但它的内容是master. 例如:

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

git pull给我这个

git branch -a然后checkout遥控器fixes_v3给了我这个

git fetch给我这个

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

如何获取代码,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)
4

2 回答 2

1

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

git fetch origin fixes_v3

创建一个分支

git checkout -b myLocalFixes_v3 origin/fixes_v3

应该做的伎俩

你在做什么的解释

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

您正在本地克隆存储库,默认情况下,您的本地存储库将在远程存储库的 HEAD 修订版上签出。默认是master

git pull 

Git pull(不带选项)将获取然后将默认跟踪分支合并到您当前的分支。当您在本地 master 上时,它起源/跟踪远程 master 分支,然后它将获取(在缓存中下载)远程 master 分支,然后将其合并到您当前的 master 分支上。

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

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

git checkout -b origin/fixes_v3

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

git checkout -b origin/fixes_v3 master

同样在这里

git checkout -b origin/fixes_v3 origin/fixes_v3

它将创建一个名为“origin/fixes_v3”的本地分支,该分支基于远程“fixes_v3”的 origin/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 远程上的远程,还是名为 origin/fixes_v3 的本地分支

于 2012-06-20T10:38:26.227 回答
0

Question turned out to be even dumber than I thought. Changes in fixes_v3 branch were not committed... after re-reading the git pro guide I was able to understand git well enough to troubleshoot such a basic step. Thanks everyone.

于 2012-06-21T14:50:34.087 回答