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

时间:2017-11-10 15:23:33

标签: git atlassian-sourcetree git-pull

一位同事和我一直在同一个分支机构工作一周,不断地推/拉变化,突然今天,我点击'拉'看看是否有任何变化我需要拉,我得到了一个错误。

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

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,它有一个内置的终端,但我似乎无法在这里找到解决方案。

10 个答案:

答案 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]只帮我取了一次。然后消息将再次返回。

在这种情况下永久解决该问题的实际帮助是:

  1. 进入我本地存储库的.git子文件夹;
  2. 打开打包的参考文件;
  3. 从错误消息中找到带有分支名称的行;
  4. 从此文件中删除它;
  5. 现在您可以取回或拉动所有您喜欢的东西。

答案 2 :(得分:2)

刚好发生在我身上;我别名下的一个参考分支已损坏。修正:

rm <root of repository>.git/refs/remotes/origin/<your alias>
git fetch

您可以在Windows上使用rd /s代替rm

以下是我为解决问题所采取的详细步骤。您可以选择跳过以下某些步骤:

  1. 我首先在本地分支机构提交了所有本地更改,这些更改给了我这个问题。
  2. 为我的本地分支创建git patches
  3. 删除了我的本地分支。
  4. 应用以下修复
  5. 运行git fetch后检出远程分支
  6. 将必要的补丁文件应用到本地分支。
  7. 这使得git恢复了ref文件。之后,一切都按预期工作了。

答案 3 :(得分:2)

我通过删除 .git/packed-refs 文件中的所有项目解决了这个问题。

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

答案 4 :(得分:1)

多个解决方案并没有完全解决它,但我最终重新克隆了

答案 5 :(得分:1)

以下是为我修复的步骤:

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

有关参考,请参见:https://git-scm.com/docs/git-pack-refs

答案 6 :(得分:0)

我遇到了类似的问题,但是我无法将提交从本地分支推送到远程分支。在我的远程分支下的sourcetree内部,我的分支突然不存在了。 我尝试了@Dudar的答案,但没有在packed-refs文件中提到分支。 所以我所做的是:

  1. 进入我本地存储库的.git \ refs \ remotes \ origin \ feature子文件夹;
  2. 删除引起该问题的名为我的分支的文件;
  3. 推送我的更改

注意:我的分支存在于名为“功能”的源子文件夹中。

答案 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