git fetch origin不会获取所有分支

时间:2014-02-25 17:47:43

标签: git branch git-clone git-fetch

我在this question的答案中读到了git fetch origin应该获取所有原始分支的答案。在我的情况下,它似乎并没有给我任何分支。这是我做的:

最初,一个名为origin的远程有7个分支。我克隆了它。 git branch然后仅返回master。我做了git fetch origingit branch仍然只显示master。如何在不单独获取其他6个分支的情况下获取其他6个分支?

2 个答案:

答案 0 :(得分:20)

您拥有所有7个分支,但git branch仅显示本地分支。即使您现在在系统上本地拥有分支数据,它们仍被视为“远程分支”。 您可以使用git branch -a看到它们。它们会被称为remotes/origin/branchname。您可以通过指定此全名来查看它们:git checkout remotes/origin/branchname

此外,在克隆存储库时,您已经拥有了所有这些分支。运行git fetch origin只会更新您的存储库,使用自上次提取(或克隆)以来在源上发生的任何新内容。

您可以在git文档中阅读有关远程分支的更多信息:Git Branching - Remote Branches

答案 1 :(得分:1)

虽然提问者回答了这个问题,但这是真正的交易:你感到困惑的原因是因为git fetch会向你展示它在新上做什么的血腥细节 remote,但是在最初克隆repo时它不会显示任何内容(git clone)。因此克隆只会创建本地主分支。因为它默认将其检出。检查出来会在本地创建它。

所以基本上你需要做的就是你在开始时指出的:单独检查所有分支。所以基本上你得到的是:

git branch -a | grep origin | sed "s@.*origin/@@" | while read f; do
  git checkout $f
done

可能有更多的低级"管道"可以做到的命令,但基本上这是从用户的角度来看。实际上,答案似乎是你可以直接创建本地分支。

git branch -a | grep origin | sed "s@.*origin/@@" | while read f; do
  git branch $f origin/$f
done

但这可能不会设立跟踪分支机构。来自How to clone all remote branches in Git?

的回答