Sourcetree/GIT - 拉动时无法锁定 ref/reference 损坏
Sourcetree/GIT - Cannot lock ref/reference broken, when pulling
我和一个同事在同一个分支工作了一个星期,不断pushing/pulling变化,今天突然,我点击'pull'看是否有任何变化我需要拉动但出现错误。
顺便说一句,这是在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)
我在 sourcetree 中,它内置了一个终端,但我似乎无法在这里找到解决方案。
多种解决方案都没有完全解决,但我最终还是重新克隆了
已接受的解决方案仅提供了有关 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
只是为了检查存储库是否健康。
NOTE : The ref
file would be of different for others. So make sure
you are using the ref
file name from the error message that you got.**
我也刚好发生;我别名下的一个 ref 分支已损坏。修复:
rm <root of repository>.git/refs/remotes/origin/<your alias>
git fetch
您可以在 Windows 上使用 rd /s
而不是 rm
。
以下是我解决问题的详细步骤。您可以选择跳过以下部分步骤:
- 我首先在出现问题的本地分支中提交了所有本地更改。
- 为我的本地分支创建 git patches。
- 删除了我的本地分支。
- 应用了以下修复
- 在 运行 git fetch
之后检查了远程分支
- 已将必要的补丁文件应用到本地分支。
这使得 git 恢复了 ref 文件。在那之后,一切又按预期进行了。
错误文本对我来说略有不同,例如:
unable to update local ref it is [hash_code_1] but expected [hash_code_2]
.
所以命令就像
rm -rf .git/refs/remotes/origin/angular_removal
只帮我抓了一次。然后消息会再次return。
在这种情况下真正帮助永久解决问题的是:
- 进入我本地存储库的 .git 子文件夹;
- 打开 packed-refs 文件;
- 从错误信息中找到分支名称所在的行;
- 从这个文件中删除它;
- 现在您可以随心所欲地获取或拉取。
注意:这是唯一似乎对某些人有效的解决方案,但也是一个危险的操作,它破坏了某些人的本地存储库。请谨慎使用,自行判断。
以下是为我修复它的步骤:
- 删除文件
.git/packed_refs
- 拉一拉。
- 运行
git pack-refs
重新创建 packed_refs 文件。
我遇到了类似的问题,但我无法将我的提交从我的本地分支推送到远程分支。查看远程分支下的 sourcetree,我的分支突然不存在了。
我尝试了@Dudar 的回答,但打包参考文件中没有提到该分支。
所以我所做的是:
- 进入我本地存储库的 .git\refs\remotes\origin\feature 子文件夹;
- 删除导致问题的名为我的分支的文件;
- 推送我的更改
注意:我的分支存在于名为 "feature" 的原始子文件夹中。
git pull
导致以下错误。
error: cannot lock ref 'refs/remotes/origin/e2e/gb-feedback-test': is at 2962f77c6b4248a82efbd4d3c*******f but expected c3c0af7e310247b4e8dfd94883******5
From https://company.com
! c3c0af7e3..2962f77c6 branch-name -> origin/branch-name (unable to update local ref)
已由
解决
git pull origin master
做一个
git gc --auto
然后
git pull
在终端中找到项目文件夹
git gc --prune=now
rm -rf .git/refs/remotes/origin
TL;DR - 删除本地 git 文件夹并再次克隆 repo
如果 none 的解决方案有效,请删除本地文件夹并从 git 存储库再次克隆该文件夹。
注意:这将删除本地存储库的其他分支。
我可以通过删除 .git/packed-refs
文件中的所有项目来修复此问题。
然后我只是 git 拉入终端以从远程获取所有 references/code。
案例 1:检查来自 git-server 的分支是否重复。
Example: two branchs below are duplicate:
- upper_with_lower
- UPPER_with_lower
---> Let consider removing one of them.
情况2:您推送的分支与其他分支重复。
更新参考
$ git update-ref -d refs/remotes/origin/[branchname]
我和一个同事在同一个分支工作了一个星期,不断pushing/pulling变化,今天突然,我点击'pull'看是否有任何变化我需要拉动但出现错误。
顺便说一句,这是在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)
我在 sourcetree 中,它内置了一个终端,但我似乎无法在这里找到解决方案。
多种解决方案都没有完全解决,但我最终还是重新克隆了
已接受的解决方案仅提供了有关 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
只是为了检查存储库是否健康。
NOTE : The
ref
file would be of different for others. So make sure you are using theref
file name from the error message that you got.**
我也刚好发生;我别名下的一个 ref 分支已损坏。修复:
rm <root of repository>.git/refs/remotes/origin/<your alias>
git fetch
您可以在 Windows 上使用 rd /s
而不是 rm
。
以下是我解决问题的详细步骤。您可以选择跳过以下部分步骤:
- 我首先在出现问题的本地分支中提交了所有本地更改。
- 为我的本地分支创建 git patches。
- 删除了我的本地分支。
- 应用了以下修复
- 在 运行 git fetch 之后检查了远程分支
- 已将必要的补丁文件应用到本地分支。
这使得 git 恢复了 ref 文件。在那之后,一切又按预期进行了。
错误文本对我来说略有不同,例如:
unable to update local ref it is [hash_code_1] but expected [hash_code_2]
.
所以命令就像
rm -rf .git/refs/remotes/origin/angular_removal
只帮我抓了一次。然后消息会再次return。
在这种情况下真正帮助永久解决问题的是:
- 进入我本地存储库的 .git 子文件夹;
- 打开 packed-refs 文件;
- 从错误信息中找到分支名称所在的行;
- 从这个文件中删除它;
- 现在您可以随心所欲地获取或拉取。
注意:这是唯一似乎对某些人有效的解决方案,但也是一个危险的操作,它破坏了某些人的本地存储库。请谨慎使用,自行判断。
以下是为我修复它的步骤:
- 删除文件
.git/packed_refs
- 拉一拉。
- 运行
git pack-refs
重新创建 packed_refs 文件。
我遇到了类似的问题,但我无法将我的提交从我的本地分支推送到远程分支。查看远程分支下的 sourcetree,我的分支突然不存在了。 我尝试了@Dudar 的回答,但打包参考文件中没有提到该分支。 所以我所做的是:
- 进入我本地存储库的 .git\refs\remotes\origin\feature 子文件夹;
- 删除导致问题的名为我的分支的文件;
- 推送我的更改
注意:我的分支存在于名为 "feature" 的原始子文件夹中。
git pull
导致以下错误。
error: cannot lock ref 'refs/remotes/origin/e2e/gb-feedback-test': is at 2962f77c6b4248a82efbd4d3c*******f but expected c3c0af7e310247b4e8dfd94883******5
From https://company.com
! c3c0af7e3..2962f77c6 branch-name -> origin/branch-name (unable to update local ref)
已由
解决git pull origin master
做一个
git gc --auto
然后
git pull
在终端中找到项目文件夹
git gc --prune=now
rm -rf .git/refs/remotes/origin
TL;DR - 删除本地 git 文件夹并再次克隆 repo
如果 none 的解决方案有效,请删除本地文件夹并从 git 存储库再次克隆该文件夹。
注意:这将删除本地存储库的其他分支。
我可以通过删除 .git/packed-refs
文件中的所有项目来修复此问题。
然后我只是 git 拉入终端以从远程获取所有 references/code。
案例 1:检查来自 git-server 的分支是否重复。
Example: two branchs below are duplicate:
- upper_with_lower
- UPPER_with_lower
---> Let consider removing one of them.
情况2:您推送的分支与其他分支重复。
更新参考
$ git update-ref -d refs/remotes/origin/[branchname]