我在尝试推送本地提交时遇到问题,这可能是在 Android Studio 崩溃时发生的。这是错误:
update_ref failed for ref 'refs/remotes/origin/master': cannot lock ref 'refs/remotes/origin/master': unable to resolve reference refs/remotes/origin/master: Invalid argument
$git stash
表示 HEAD
现在在我最新的提交中。
我仍然是 git 的初学者,我不知道如何修复它。我能做什么?
最佳答案
您的 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 刚刚结束与另一个 Git 在 origin
上的对话,给他们(origin
的用户)更新他们的 master
,并且origin
已经接受了这些更新,你的 Git 现在正在记录这样一个事实,即上次它与 origin
交谈时,他们的 master
被设置为某个特定的提交哈希值——你刚刚推送的那个。
(请记住,您的 origin/*
远程跟踪分支只是为您记录您的 Git 看到的他们的 Git 对其分支的内容。您的 Git 更新当你运行 git fetch
时,你的 Git 会与他们的 Git 对话并获取它的所有分支。你的 git 也会更新一些——不是全部——在 git push
上,当你Git 与他们的 Git 对话,并要求他们设置一个或多个分支,以您的 Git 交给他们的哈希值。)
1除了作为 Git 机械师,我推荐的部件实际上是合适的车身面板、皮带和软管以及夹子,而不仅仅是胶带、打包线和口香糖。 :-)
关于推送时出现 Git 错误 - update_ref 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38380009/