Git存储库丢失了远程分支?

32

我有一个已经设置了远程 ("git fetch"能正常使用) 的Git代码库,但是它没有任何远程分支:".git/refs/remotes"文件夹不存在,

git branch -r 

返回空值(空列表,没有分支)。但实际上远程仓库确实有一个分支。如果我重新克隆远程仓库,我会得到另一个具有远程分支的本地仓库。

我认为这种状态是不可能的。我的问题:

  1. 我怎么会陷入这种状态?
  2. 是否有命令可以运行以恢复“.git/refs/remotes”?(除了重新克隆之外,我已经这样做过)。

其他信息

"git config --get remote.origin.fetch"为空(即该命令没有输出)

"git remote show origin"显示

$ git remote show origin
* remote origin
  Fetch URL: <correct remote url here>
  Push  URL: <correct remote url here>
  HEAD branch: master
  Local ref configured for 'git push':
    master pushes to master (up to date)

"git remote show origin" 的输出是什么?[origin 是远程 repo 的名称] - Karthik Bose
编辑以包括“git remote show origin”的输出。 除非我漏掉了什么,否则所有内容看起来都很正常。 - stochastic
关于fetch配置的相关上下文请参考:https://dev59.com/oX_aa4cB1Zd3GeqP8-Lo#23780060 - Tim Abell
2个回答

51

[编辑,2017年4月] 如果你的原始克隆是使用 --single-branch 进行的,则你的 remote.origin.fetch 设置可能会有问题。如果您使用了 --depth 限制,这也意味着使用了 --single-branch。恢复下面描述的正常 remote.origin.fetch 值,您将获得更完整的克隆。


通常,只需运行 git fetch 即可恢复您的远程跟踪分支。

如果 git fetch 没有恢复它们,那么我想知道:运行 git config --get-all remote.origin.fetch 会打印什么?(假设远程命名为 origin;如果不是,请替换为实际名称。)它应该设置为 +refs/heads/*:refs/remotes/origin/*(再次假设名称为 origin)。特殊情况(例如获取注释)可能会添加更多行。


很遗憾,git fetch不能恢复它们。"git config --get remote.origin.fetch"没有输出。 - stochastic
2
将您指定的值手动放入此存储库的 .git/config 文件下的 fetch 变量确实会导致 "git fetch" 恢复丢失的远程分支。如果有人知道这是如何发生的,让其他人了解这一点仍然很有价值。 - stochastic
1
奇怪。git remote add 用一条 fetch 行设置远程,可以是典型的那种,也可以是镜像的特殊版本(带有 --mirror=fetch)。克隆远程 repo 以相同的方式设置 origin 远程。到目前为止,删除它的原因仍然是个谜。 - torek
我也遇到了这个问题 - 我想当我克隆这个仓库时,我使用了 --depth=15 ,也许这有关系? - cloakedninjas
我被这个问题难住了,唯一能提供的线索是我在使用糟糕的移动网络进行fetch/push操作,并将--set-upstream设置为默认推送选项以方便操作。我不明白为什么这会影响到任何东西。感谢朋友们的修复!屏幕截图请见https://twitter.com/tim_abell/status/1573027018589065216。 - Tim Abell

31

这解决了我的问题。

git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/*

当我执行vi .git/config时,我失去了fetch行:

fetch = +refs/heads/*:refs/remotes/origin/*


3
可能值得引用该值以避免shell globbing。 git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*' - Tim Abell

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