推送时Git无法解析引用

cid*_*ack 17 git github

我和Git有问题.由于未知原因,我的主分支已经被破坏了.我有一个本地提交,我想推高,但当我推,我得到这个:

git push origin master
error: unable to resolve reference refs/remotes/origin/master: No such file or directory
error: cannot lock the ref 'refs/remotes/origin/master'.
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)

我已经在其他主板上看到了这个问题,但通常指的是拉动而不是推动.尽管如此,我已经尝试过他们的解决方案,但无济于事:

  1. 试图修改我目前的提交和推动
  2. 清理我的git存储库 git gc --prune=now
  3. 试着 rm .git/refs/removes/origin/master

没有人解决我的问题.有什么想法或想法吗?

jth*_*ill 36

(值得一试;来自@NeTeInStEiN的博士:

核选项是rm -rf .git/refs/remotes/origin,这是它在这里采取的)

编辑:我在我自己的一个回购中遇到了这种行为的一部分,我可以得到git来重现没有rm .git/refs/remotes/origin/masterhack 的fer故障:

  • 克隆一个回购
  • 删除原点的主分支(其HEAD附加的分支)
  • git fetch --prune在克隆中运行

获取将产生一个悬空引用警告,并且git for-each-ref会在熟悉的消息中失败:

~/sandbox/20/buddy$ git fetch --prune
From /home/jthill/sandbox/20/source/.
 x [deleted]         (none)     -> origin/master
   (refs/remotes/origin/HEAD has become dangling)
~/sandbox/20/buddy$ git f-e-r
fatal: missing object 0000000000000000000000000000000000000000 for refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)

但这并没有打破推动力,我已经尝试过每一个环境push.default,也没有打破git update-ref -d.

然而,谷歌搜索推送消息确实让我这样:

我刚刚从BSOD重新启动了[...]然后git push.当我收到关于"无法解析参考参考/遥控器/原点/主人......"的投诉时.[...]所以,我打开了主文件,它充满了空间!嗯,这不好.为了解决这个问题,我做了这个:[你的rm,然后git fetch]


请参阅上面的评论,吹嘘,tl; dr是,因为这些是远程参考,git fetch完全刷新,并且由于损坏是这样的,for-each-ref并且git update-ref根本无法工作,核选项rm -rf refs/remotes/origin; git fetch保证正确恢复远程.

在其他情况下,如果没有简单的方法来恢复损坏的refs或好奇心,find .git/refs/remotes/origin -type f检查锁定或使用reflogs(那些文件都在.git/logs)恢复内容会有所帮助,但这里没有必要.我认为我错过了赌注,因为没有做第find一个,*.lock来自kill -9早期ed命令的文件看起来可能在这里,但我怀疑一个模棱两可的ref和fer是我的第一步.


  • 对我来说,需要额外的 `rm .git/packed-refs` 来解决这个错误。 (2认同)

小智 6

从 .git 文件夹中删除以下目录 -> .git/refs/remotes/origin

这将删除所有远程分支,您需要使用 -> git fetch 再次获取它们。这应该可以解决问题。