为什么我不能从远程分支拉取代码?

4
[console]: git remote -v
origin git@testServer.com:myProj/myProj.git(fetch)
origin git@testServer.com:myProj/myProj.git(push)

[console]: git branch -a
*myBranch
development
remotes/origin/myBranch
remotes/origin/development

[console]: git pull origin/myBranch myBranch
fatal: 'origin/myBranch' does not appear to be a git repository
fatal: Could not read from remote repository

我最初创建了这个分支,并且已经在向它推送了一段时间。昨天,我从另一个分支中rebase到我的分支,可能会导致某些问题出现?

2个回答

13

您的语法有误:正确的写法是 git pull [ 远程仓库名 [ 分支名 ] ],而不是 git pull 远程仓库名/分支名 分支名。在这种情况下,您需要使用 git pull origin myBranch

话虽如此,我建议您不要使用 git pull,至少在熟悉 Git 之前不要使用。原因是 git pull 做了两件事情,其中第二件事情是运行 git merge,它:

  • 可能无法自动完成,会在中途停止,并需要您的帮助;
  • 生成 "foxtrot merges",每当它进行真正的合并时,都会产生一些反向的合并;
  • 通常最好使用 git rebase 完成。
git pull 的前半部分是 git fetch,所以你可以只运行 git fetch,等它成功后再运行想要的 git mergegit rebase 命令。这两个命令都比 git pull 更加合理。
使用 git fetch 命令,你需要指定要从哪个远程库获取,例如:git fetch origin(或者让 git fetch 自动找到:不带参数运行 git fetch 通常会自动使用 origin)。
对于 git mergegit rebase,你需要指定 origin/myBranch 远程跟踪分支的名称,或者再次让 Git 自动处理。
所有这些也意味着,git pull通常也会自行解决这些问题。特别是如果git mergegit rebase可以找出要使用origin/myBranch,那么git pull可以找出要使用originorigin/myBranch进行两个步骤。

6
正确的语法是git pull origin myBranch。命令的第一个参数应该是远程库的名称,正如错误提示所建议的那样fatal: 'origin/myBranch' does not appear to be a git repository

今天我才发现git pull origin branch并没有像我期望的那样工作...每次执行完后,我总是会用git branch -a -vv检查我的sha是否相同。但是它们并不相同...所以我检出了远程分支的本地版本,然后执行了git pull...它更新了...然后我回到了我一直在工作的分支上,再次执行了git pull origin branch,这一次有了更新...所以它几乎就像git pull origin branch只看了我的本地分支副本...什么鬼? - carinlynchin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接