关于分支:git fetch origin不获取所有分支

git fetch origin doesn't fetch all branches

我在回答这个问题时读到,git fetch origin应该把所有的分支都取出来。但就我而言,它似乎没有给我任何分支。我是这样做的:

最初,一个叫做原点的遥控器有7个分支。我克隆了它。git branch然后只返回master。我做了git fetch origingit branch仍然只显示master。我怎样才能在不单独提取其他6个分支的情况下获得它们呢?


您有全部7个分支,但git branch只显示本地分支。即使您现在在系统上本地拥有分支数据,它们仍然被认为是"远程分支"。你可以用git branch -a看到它们。它们将被称为类似于remotes/origin/branchname的东西。您可以通过指定以下全名来检查它们:git checkout remotes/origin/branchname

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

您可以在git文档中了解有关远程分支的更多信息:git分支-远程分支


尽管这个问题是由提问者回答的,但真正的问题是:你感到困惑的原因是git fetch将向你展示它在新遥控器上所做的血腥细节,但在最初克隆repo时,它不会向你显示任何东西(git clone)。所以克隆只创建本地主分支。因为默认情况下它会检查出来。签出会在本地创建它。

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

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

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

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

但这可能不会建立跟踪分支。如何克隆Git中的所有远程分支?