【问题标题】:Git error when pushing - update_ref failed推送时出现 Git 错误 - update_ref 失败
【发布时间】:2016-11-17 17:07:34
【问题描述】:

当我尝试推送本地提交时遇到问题,这可能是在 Android Studio 崩溃时发生的。这是错误:

ref 'refs/remotes/origin/master' 的 update_ref 失败:无法锁定 ref 'refs/remotes/origin/master':无法解析参考 refs/remotes/origin/master: 参数无效

$git stash 表示 HEAD 现在是我的最新提交。

我还是 git 的初学者,我不知道如何解决它。我该怎么办?

【问题讨论】:

    标签: git android-studio


    【解决方案1】:

    您的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 通信,为他们(origin 的用户)提供了他们的 master 的更新,origin 已接受这些更新,您的 Git 现在正在记录事实上,它最后一次与 origin 交谈时,他们的 master 被设置为某个特定的提交哈希——你刚刚推送的那个。

    (请记住,您的 origin/* 远程跟踪分支只是为您记录您的 Git 看到的 他们的 Git 对其分支的内容。当您运行 git fetch 时,您的 Git 会更新这些内容, 你的 Git 与他们的 Git 对话并获取它的所有分支。当你的 Git 与他们的 Git 对话并要求他们设置一个或更多的分支,你的 Git 交给它们的哈希值。)


    1除了作为一名 Git 技工,我推荐的零件不只是胶带、打包线和口香糖,实际上我推荐的部件是合适的车身面板、皮带和软管以及夹子。 :-)

    【讨论】:

      【解决方案2】:

      除了接受的答案中提到的步骤外,我还必须使用下面的垃圾收集器命令来删除悬空的提交 blob。

           git gc --prune="0 days" 
      

      您可以通过运行检查悬空的 blob

          git fsck
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
        • 我建议将“尝试...”改为“如果问题是...您可以通过...找出问题并通过执行...进行修复,因为它的工作原理类似于... . 并解决了问题,因为 ...."。
        • 它对我有用,只是删除了 .git/refs/remote/origin。谢谢
        【解决方案4】:

        要将提交推送到您的在线仓库,您需要这样做:$ git push origin branch_name。要知道您的分支名称,只需执行$ git status,它就会显示出来(在 git bash 中它是蓝色的)。您的问题可能来自不同的来源。基本上,git 告诉您它无法理解您作为参数传递的内容。你确定你在你的仓库中吗?

        【讨论】:

        • 当我尝试推送时出现的错误。我在分支大师。是的,我确定我在我的存储库中,因为我可以看到我在 Android Studio 中所做的更改,例如当我添加一个drawable时,我还可以在stash中看到我的最新提交,这里是消息:“保存的工作目录和索引状态WIP在master上:a5fa9f4浮动操作栏和夜主题添加HEAD现在在a5fa9f4浮动操作栏和夜添加了主题”有什么想法吗?
        • @Pawel 所以你使用这个确切的命令: git push origin master 并且它出错了?
        【解决方案5】:

        我的磁盘空间用完了,导致 git 无法写入锁定文件

        【讨论】:

          猜你喜欢
          • 2018-02-24
          • 1970-01-01
          • 2013-03-17
          • 2023-03-16
          • 1970-01-01
          • 2012-06-12
          • 1970-01-01
          • 2016-12-30
          • 1970-01-01
          相关资源
          最近更新 更多