Sourcetree/GIT - 拉动时无法锁定参考/参考被破坏

Tom*_* N. 11 git git-pull atlassian-sourcetree

一个同事和我一直在同一个分支上工作一个星期,不断推/拉变化,突然今天,我点击'拉'看看是否有任何变化我需要拉,我得到一个错误.

顺便提一下,这是源码.错误是这样的:

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)
Run Code Online (Sandbox Code Playgroud)

我在sourcetree,它有一个内置的终端,但我似乎无法在这里找到解决方案.

Dud*_*dar 20

错误文本对我来说略有不同,如: unable to update local ref it is [hash_code_1] but expected [hash_code_2].

所以这个命令 rm -rf .git/refs/remotes/origin/angular_removal帮助我只做一次抓取.然后该消息将再次返回.

在这种情况下,实际上有助于永久解决问题的是:

  1. 进入我本地存储库的.git子文件夹;
  2. open packed-refs文件;
  3. 从错误消息中找到带有分支名称的行;
  4. 从此文件中删除它;
  5. 现在你可以取你喜欢的东西.


Raj*_*gan 16

已接受的解决方案仅提供有关OP如何解决问题的详细信息,并且它不是明确的答案.

为了像我这样最终来自谷歌的人,以下是真正有效的解决方案.

可以说,如果错误说,

error: cannot lock ref 'refs/remotes/origin/angular_removal': unable to resolve reference 'refs/remotes/origin/angular_removal': reference broken
Run Code Online (Sandbox Code Playgroud)

这里,违规元素是一个名为corded的文件refs/remotes/origin/angular_removal,它位于.git隐藏文件夹中.

要解决此问题,请在存储库根目录下运行以下命令.

rm .git/refs/remotes/origin/angular_removal
git fsck
Run Code Online (Sandbox Code Playgroud)

单独的第一个命令应该解决问题,git尝试重新初始化缺少的引用.

该命令git fsck只是为了检查存储库是否健康状况良好.


注意:该ref文件对其他人来说会有所不同.因此,请确保使用ref您收到的错误消息中的文件名.**

  • 这才是真正的答案.之后执行步骤和获取我已经让它工作了 (2认同)

Luc*_*tro 12

注意:这是似乎对某些人有效的唯一解决方案,但也是一个危险的操作,它破坏了某些人的本地存储库。请谨慎使用,并自行决定。

以下是为我修复它的步骤:

  1. 删除文件 .git/packed_refs
  2. 拉一下。
  3. 运行git pack-refs以重新创建packed_refs 文件。

参考:https : //git-scm.com/docs/git-pack-refs

  • 这是解决我自己的情况的解决方案。所有其他解决方案都没有帮助。 (2认同)
  • @LucasCastro 我刚刚发布了对我有帮助的答案 (2认同)

Bry*_*den 4

我可以通过删除.git/packed-refs文件中的所有项目来解决此问题。

然后我只是在终端中执行了 git pull 来从远程获取所有引用/代码。