Git推送时出现错误 - update_ref失败。

15

当我尝试推送本地提交时,出现了问题,这可能是在 Android Studio 崩溃时发生的。以下是错误信息:

更新引用“refs/remotes/origin/master”失败:无法锁定引用“refs/remotes/origin/master”:无法解决引用“refs/remotes/origin/master”的参考:无效参数。

$git stash 命令显示 HEAD 已经在我的最新提交上。

作为一个 Git 初学者,我不知道该如何解决它……有什么办法吗?

6个回答

41

你本地代码库中的 refs/remotes/origin 目录出了一些问题(我不清楚具体是什么问题,但你猜测这可能发生在Android Studio 崩溃时,这似乎也有可能)。

为了解决这个问题,你可以使用下面的命令序列,虽然我一般不推荐这样做——你的 Git 服务(无论是 Android Studio 还是普通的命令行 Git)不应该崩溃并留下一个损坏的代码库,所以你永远不应该必须这样做,这只是一种紧急修复,类似于树木倒塌后在汽车上贴胶带来暂时让你能够达到修理或更换车辆的目的1

$ cd $(git rev-parse --show-toplevel)  # if necessary
$ rm -rf .git/refs/remotes/origin      # remove all origin/*
$ mkdir .git/refs/remotes/origin       # create empty origin/
$ git fetch origin                     # repopulate origin/*

无论如何,你的git push在这一步很可能已经成功了,因为失败的是对你的 origin/master 远程跟踪分支的更新。

你的 Git 刚刚完成了与 origin 上另一个 Git 的通信,并向那里的用户提供了其 master 的更新,origin 已经接受了这些更新,而你的 Git 现在记录下了这个事实:在最后一次与 origin 交流时,他们的 master 被设置为某个特定的提交哈希值——你刚刚推送的那个哈希值。

(请记住,你的 origin/* 远程跟踪分支只是为了记录下你的 Git 所看到的他们 Git 分支的信息。当你运行 git fetch 时,你的 Git 会与他们的 Git 通信并获取它的所有分支。当你的 Git 与他们的 Git 通信并请求将其一个或多个分支设置为你的 Git 提供的哈希值时,你的 Git 也会更新其中的一些(不是全部)。)


1作为 Git 技术人员,我的建议是使用正确的车身面板、传动皮带和软管,以及卡箍等合适的零部件,而不仅仅只是胶带、铁丝和口香糖。:-)


4
除了接受答案中提到的步骤之外,我还需要使用下面的垃圾收集器命令来删除悬空的提交Blob。
     git gc --prune="0 days" 

您可以通过运行命令来检查悬空的 Blob:
    git fsck

3
尝试执行:git gc --prune=now并删除.git/refs/remote/origin。

3
虽然这段代码可能解决了问题,但是包括解释它如何解决问题的内容会有助于提高您的帖子质量并可能获得更多赞。请记住,您回答问题是为了未来的读者,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释,并指出哪些限制和假设适用。 - Yunnosch
我建议重新表述为:“如果问题是......,您可以通过......找出问题并通过执行......来解决,因为它的工作方式类似于......并解决了问题,因为......”。 - Yunnosch
1
它对我起作用了,只需删除.git/refs/remote/origin。谢谢。 - Moisés Aguilar

2

我磁盘空间不足,导致git无法写入锁定文件


1
要将提交推送到您的在线存储库,您需要执行以下操作:$ git push origin branch_name。要知道您的分支名称,只需执行$ git status即可(在git bash中,它显示为蓝色)。您的问题可能来自不同的来源。基本上,git告诉您它无法理解您传递的参数。您确定您在您的存储库中吗?

当我尝试推送时,出现了错误。我在主分支上。是的,我确定我在我的存储库中,因为我可以在Android Studio中看到我所做的更改,例如当我添加一个可绘制对象时,我也可以在stash中看到我的最新提交,这里是消息:“保存工作目录和索引状态WIP on master:a5fa9f4添加浮动操作栏和夜间主题 HEAD is now at a5fa9f4 Floating Action Bar and night theme added”有什么想法吗? - Pawel
@Pawel 所以你使用这个确切的命令:git push origin master,但它出错了吗? - limbo

0

我的类似错误信息:

错误:无法更新引用“refs/remotes/origin/alex-he/ITCAML-1691”:无法为“.git/logs/refs/remotes/origin/alex-he/ITCAML-1691”创建目录:没有这样的文件或目录

我遇到这个问题是因为在两个目录中都有一个名为“alex-he”的文件,但它应该是一个目录。所以我手动删除了两个目录中的文件,然后问题得到解决。


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