无法锁定refs/heads/master

29

我对git还比较新,遇到了这个问题。git push命令显示以下错误。我将从一开始解释我一直在尝试做什么。 我创建了一个子模块,提交并推送了它。推送会引发以下错误。

Salman@PC_HOME ~/git/breakit-web-app (master)
$ git push origin master
error: refs/heads/master does not point to a valid object!
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 421 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: bb/acl: salmanmanekia is allowed. accepted payload.
error: Ref refs/heads/master is at 6a47a0fd398610a75bdab8976f842dc0efd89f86 but expected 00000000000000000000000000000000000000000
remote: error: failed to lock refs/heads/master

To ssh://git@bitbucket.org/majuri/breakit-web-app.git
 ! [remote rejected] master -> master (failed to lock)
error: failed to push some refs to 'ssh://git@bitbucket.org/majuri/breakit-web-app.git'

这是一张截图: enter image description here

之后,我试了一些解决方案,但都没有成功。我也会简要说明我尝试过的方法。

1:从Bitbucket存储库中,我注意到有一些悬空提交(图片2中的红色箭头),所以我执行了以下命令来解决问题 git gc and git prune.

2:我还尝试了像git revert HEAD和git push origin HEAD --force这样的命令,但似乎都不起作用。 enter image description here

其他细节:

$ git rev-parse --symbolic-full-name master
refs/heads/master

$ git rev-parse master
0da090c5cbde10ff19602a2722ae05231c30dff5

$ git show-ref master
0da090c5cbde10ff19602a2722ae05231c30dff5 refs/heads/master
6a47a0fd398610a75bdab8976f842dc0efd89f86 refs/remotes/origin/master

谢谢


git show-ref refs/remotes/origin/master 的输出是什么? - vergenzt
git fetch origin 输出什么?也许你的远程跟踪分支不同步了或者出了什么问题...? - vergenzt
它没有输出任何内容...Salman@PC_HOME ~/git/breakit-web-app (master) $ git fetch origin - mu_sa
git rev-parse --symbolic-full-name master, git rev-parse master 和 git show-ref master 的输出是什么? - Richard Hansen
Salman@PC_HOME ~/git/breakit-web-app (dev270612) $ git rev-parse --symbolic-full-name master
refs/heads/master
- mu_sa
显示剩余5条评论
3个回答

35

您需要更新git已知的HEAD。这对您来说是透明的。

  1. 进入master分支。

git checkout master
从远程获取更新并同步到本地代码库。
git fetch
更新本地存储库时,请使用rebase而不是merge。请参见git pull和git rebase之间的区别
git rebase origin/master
推送您的master分支。
git push origin master:master

1
这对我有用(使用sourcetree)。简单而高效。 - Obmerk Kronen
4
你可以使用一个更简单的命令 git pull origin master --rebase,它与你前面输入的三个命令是相同的。 - Édouard Lopez

4

如果您已经尝试了以上所有步骤但仍无法解决问题,请尝试以下命令。

rm -fr ".git/rebase-merge"

2

git pull origin master --rebase

这个命令对我很有效。


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