一位同事和我一直在同一个分支机构工作一周,不断地推/拉变化,突然今天,我点击'拉'看看是否有任何变化我需要拉,我得到了一个错误。
顺便提一下,这是源代码。错误是这样的:
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
error: cannot lock ref 'refs/remotes/origin/angular_removal': unable to resolve reference 'refs/remotes/origin/angular_removal': reference broken
From https://bitbucket.org/colossus
! [new branch] angular_removal -> origin/angular_removal (unable to update local ref)
我在sourcetree,它有一个内置的终端,但我似乎无法在这里找到解决方案。
答案 0 :(得分:13)
接受的解决方案仅提供有关OP如何解决问题的详细信息,而且不是明确的答案。
为了像我这样最终来自Google的人,以下是真正有效的解决方案。
可以说,如果错误说明,
error: cannot lock ref 'refs/remotes/origin/angular_removal': unable to resolve reference 'refs/remotes/origin/angular_removal': reference broken
此处,违规元素是名为refs/remotes/origin/angular_removal
的已损坏文件,该文件位于.git
隐藏文件夹中。
为了解决此问题,请在存储库根目录下运行以下命令。
rm .git/refs/remotes/origin/angular_removal
git fsck
第一个命令应该解决问题,因为git
尝试重新初始化缺少的引用。
命令git fsck
就是为了检查存储库是否运行状况良好。
注意:
ref
文件对其他人来说会有所不同。所以要确保 您正在使用错误消息中的ref
文件名。**
答案 1 :(得分:13)
错误文本对我来说有点不同,例如:
"
。
所以命令像
unable to update local ref it is [hash_code_1] but expected [hash_code_2]
只帮我取了一次。然后消息将再次返回。
在这种情况下永久解决该问题的实际帮助是:
答案 2 :(得分:2)
刚好发生在我身上;我别名下的一个参考分支已损坏。修正:
rm <root of repository>.git/refs/remotes/origin/<your alias>
git fetch
您可以在Windows上使用rd /s
代替rm
。
以下是我为解决问题所采取的详细步骤。您可以选择跳过以下某些步骤:
这使得git恢复了ref文件。之后,一切都按预期工作了。
答案 3 :(得分:2)
我通过删除 .git/packed-refs
文件中的所有项目解决了这个问题。
然后我只是在终端中执行 git pull 以从远程获取所有引用/代码。
答案 4 :(得分:1)
多个解决方案并没有完全解决它,但我最终重新克隆了
答案 5 :(得分:1)
以下是为我修复的步骤:
.git/packed_refs
git pack-refs
以重新创建packed_refs文件。答案 6 :(得分:0)
我遇到了类似的问题,但是我无法将提交从本地分支推送到远程分支。在我的远程分支下的sourcetree内部,我的分支突然不存在了。 我尝试了@Dudar的答案,但没有在packed-refs文件中提到分支。 所以我所做的是:
注意:我的分支存在于名为“功能”的源子文件夹中。
答案 7 :(得分:0)
在终端中找到项目文件夹
git gc --prune=now
rm -rf .git/refs/remotes/origin
答案 8 :(得分:0)
TL; DR-删除本地git文件夹,然后再次克隆存储库
如果所有解决方案均无效,请删除本地文件夹,然后从git repo再次克隆该文件夹。
注意:这将删除本地存储库的其他分支。
答案 9 :(得分:-1)
做
git gc --auto
然后做
git pull