【问题标题】:git fetch origin doesn't fetch all branchesgit fetch origin 不会获取所有分支
【发布时间】:2014-03-28 03:25:48
【问题描述】:

我在this question 的答案中读到git fetch origin 应该获取所有 个起源分支。不过,就我而言,它似乎没有给我任何分支。这是我所做的:

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

【问题讨论】:

标签: git branch git-clone git-fetch


【解决方案1】:

虽然提问者回答了这个问题,但这是真正的问题:您感到困惑的原因是因为git fetch 会向您展示它在 new 上所做的事情的血腥细节远程,但在最初克隆 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?的回答

【讨论】:

  • 我不明白为什么在克隆过程中,git 不只是克隆所有的 .git/ref/heads 。 IE。所有 .git/object 文件都已经存在。事实上,我尝试将 .git/refs/heads 文件复制到一个新的克隆仓库中,而 git 会仅列出带有 git branch 的分支(没有 -a)。
【解决方案2】:

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

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

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

【讨论】:

  • 我能够签出分支,但代码不是最新的。使用任意数量的 pull 或 fetch 命令也不会更新它。我正在尝试更新在另一台计算机上启动的 PR,因此我检查了分支 git checkout origin/finalize,但它说我处于 detached HEAD 状态,并且我检查的代码不是最新的。我知道代码不是最新的,因为它没有反映我在 PR 中所做的更改。当我回到工作岗位时,我基本上是在尝试接回我在家里做的工作。同一个仓库,同一个用户,只是同一个仓库的不同克隆
猜你喜欢
  • 2016-10-06
  • 2021-03-20
  • 2011-09-28
  • 2015-10-05
  • 2020-08-17
  • 2016-08-06
  • 2019-11-02
  • 2017-04-25
  • 2019-10-30
相关资源
最近更新 更多