git fetch origin doesn't fetch all branches
我在回答这个问题时读到,git fetch origin应该把所有的分支都取出来。但就我而言,它似乎没有给我任何分支。我是这样做的:
最初,一个叫做原点的遥控器有7个分支。我克隆了它。git branch然后只返回master。我做了git fetch origin,git branch仍然只显示master。我怎样才能在不单独提取其他6个分支的情况下获得它们呢?
您有全部7个分支,但git branch只显示本地分支。即使您现在在系统上本地拥有分支数据,它们仍然被认为是"远程分支"。你可以用git branch -a看到它们。它们将被称为类似于remotes/origin/branchname的东西。您可以通过指定以下全名来检查它们:git checkout remotes/origin/branchname。
此外,克隆存储库时,您已经拥有了所有这些分支。运行git fetch origin只需使用自上次获取(或克隆)以来在源站上发生的任何新情况更新您的存储库。
您可以在git文档中了解有关远程分支的更多信息:git分支-远程分支
- 我可以查看分支,但代码不是最新的。使用任何数量的pull或fetch命令也没有更新它。我试图更新我在另一台计算机上启动的一个pr,所以我签出了git checkout origin/finalize分支,但它说我处于detached HEAD状态,我签出的代码不是最新的。我知道代码不是最新的,因为它不反映我在公共关系中所做的更改。我基本上是想在我回到工作岗位后在家里做的工作。相同的回购、相同的用户、同一回购的不同克隆
尽管这个问题是由提问者回答的,但真正的问题是:你感到困惑的原因是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中的所有远程分支?
- 我不明白的是,为什么在克隆过程中,Git不只是克隆所有的.git/ref/heads。也就是说,所有的.git/对象文件都已经存在了。事实上,我尝试将.git/refs/heads文件复制到一个新的克隆repo中,而git将列出只包含git分支(no-a)的分支。