758

使用 git 1.6.4.2,当我尝试 a 时出现git pull此错误:

error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
 ! [new branch]      LT558-optimize-sql -> origin/LT558-optimize-sql  (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
 ! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

我试过git remote prune origin了,但没有帮助。

4

33 回答 33

1148

尝试使用以下命令清理本地存储库:

$ git gc --prune=now
$ git remote prune origin

人 git-gc(1):

git-gc - Cleanup unnecessary files and optimize the local repository

git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]

       Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
       (to reduce disk space and increase performance) and removing unreachable objects which may have been
       created from prior invocations of git add.

       Users are encouraged to run this task on a regular basis within each repository to maintain good disk
       space utilization and good operating performance.

人 git-remote(1):

git-remote - manage set of tracked repositories

git remote prune [-n | --dry-run] <name>

           Deletes all stale remote-tracking branches under <name>. These stale branches have already been
           removed from the remote repository referenced by <name>, but are still locally available in
           "remotes/<name>".            
于 2011-09-08T13:36:43.663 回答
750

也发生在我身上。就我而言,坏的参考是主人,我做了以下事情:

rm .git/refs/remotes/origin/master
git fetch

这使得 git 恢复了 ref 文件。之后,一切都再次按预期工作。

于 2013-03-17T08:37:19.773 回答
155

这为我完成了工作:

git gc --prune=now
于 2011-09-30T18:18:43.430 回答
106

对我来说,它可以从文件夹中删除引发错误的文件.git/refs/remotes/origin/

于 2015-06-19T13:09:49.367 回答
77

我只想添加导致 Git 引用损坏的可能原因之一。

可能的根本原因

在我的系统(Windows 7 64 位)上,当发生BSOD 时一些存储的参考文件(最有可能在 BSOD 发生时当前打开/正在写入)被NULL字符(ASCII 0)覆盖。

正如其他人提到的,要修复它,只需删除那些无效的参考文件并重新获取或重新提取存储库就足够了。

例子

错误信息:

无法锁定 ref 'refs/remotes/origin/some/branch':无法解析参考 'refs/remotes/origin/some/branch':参考损坏

解决方案:

删除refs/remotes/origin/some/branch文件中存储的引用%repo_root%/.git/refs/remotes/origin/some/branch

于 2018-05-22T12:07:21.763 回答
70

试试看:

git gc --prune=now

git remote prune origin

git pull
于 2018-11-23T19:59:22.950 回答
58

说明:看起来您的远程仓库(在 Github / bitbucket 中)分支已被删除,尽管您的本地引用未更新并指向不存在的引用。

为了解决这个问题:

git fetch --prune
git fetch --all
git pull

如需额外阅读 - 来自Github 文档的参考:

git-fetch - 从另一个存储库下载对象和引用

--all 获取所有遥控器。

--prune 获取后,删除远程不再存在的任何远程跟踪分支。

于 2019-11-05T14:18:48.183 回答
48

执行以下命令:

rm .git/refs/remotes/origin/master

git fetch

git branch --set-upstream-to=origin/master

以防万一,如果您需要知道什么是 .git/refs/remotes/origin/master,您可以阅读Git 参考中的Remotes部分。

于 2017-07-05T10:56:41.330 回答
45

我遇到了同样的问题,并通过转到出错​​的文件来解决它:

\repo\.git\refs\remotes\origin\master

这个文件充满了空值,我用来自 github 的最新 ref 替换了它。

于 2012-11-27T12:40:00.223 回答
44

就我而言,在我删除了目录下的所有删除参考文件后,问题就解决了.git

如果您查看该消息,它会告诉您需要删除哪些文件(特别是)。

要删除的文件位于.git/refs/remotes.

我刚刚删除了那里的所有文件,然后运行 ​​gc prune

git gc --prune=now

之后,一切正常。

于 2016-08-03T08:29:41.773 回答
38

git fetch --prune为我修复了这个错误:

[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref 'refs/remotes/origin/user/janek/integration/20170505': 'refs/remotes/origin/user/janek/integration' exists; cannot create 'refs/remotes/origin/user/janek/integration/20170505'
From github.com:zooxco/driving
 ! [new branch]            user/janek/integration/20170505 -> origin/user/janek/integration/20170505  (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
 - [deleted]               (none)     -> origin/user/janek/integration

不过,这假设有问题的分支已在远程被删除。

您还可以将其添加到~/.gitconfig运行时自动修剪git fetch

[fetch]
    prune = true
于 2017-05-10T22:11:30.743 回答
23

如果此错误“无法更新本地参考”再次出现,即使在应用了Vojtech VitekMichel Krämer的答案后,您的本地和主存储库也可能有错误的参考。

在这种情况下,您应该同时应用两个修复程序,而不要在两者之间拉动或推动...

rm .git/refs/remotes/origin/master
git fetch
git gc --prune=now
git remote prune origin

对我来说,只有在推/拉之前应用两个修复后才能实现永久解决方案。

于 2019-10-08T08:35:48.143 回答
12

对我来说,我是这样解决的:

rm .git/refs/remotes/origin/master
git fetch

之后,我从 github 收到此消息。

当前分支没有跟踪信息

所以接下来我要解决这个问题是:

git branch --set-upstream-to=origin/master master
git pull
于 2020-09-01T09:03:00.257 回答
11

简而言之,当您的本地人有一些关于远程的信息并且有人更改了一些使远程和您的更改不同步的东西时,就会出现这个问题。

我遇到这个问题是因为有人删除了远程分支并再次使用相同的名称创建。

要处理此类问题,请从远程进行拉取或获取。

git remote prune origin

或者,如果您使用任何 GUI,请从远程获取。

在此处输入图像描述

于 2016-07-05T11:27:41.730 回答
6

尝试这个:

git pull origin Branch_Name

Branch_Name,您当前所在的分支。

如果你只做 a git pull,它也会拉取所有其他创建的分支名称。

你得到这个的原因也是如此:

! [new branch]      split-css  -> origin/split-css  (unable to update local ref)
于 2017-03-24T06:14:58.953 回答
4

我能够与

git remote update --prune
于 2016-01-07T08:48:50.170 回答
2

对我来说,我有一个名为的本地分支feature/phase2,而远程分支名为feature/phase2/data-model. 命名冲突是问题的原因,所以我删除了我的本地分支(如果它有任何你需要保留的东西,你可以重命名它)

于 2015-03-10T13:11:05.943 回答
2

我正在使用 Tower,出于某种原因,我的文件夹名称是.git/refs/remotes/origin/Github. 将其更改为小写即可.git/refs/remotes/origin/github解决问题。

于 2020-04-15T20:33:41.803 回答
2

如果git gc --prune=now不帮助你。(像我一样倒霉)

我所做的是在本地删除项目,然后重新克隆整个项目。

于 2017-03-21T00:45:33.040 回答
1

错误:无法锁定引用”仅表示 /refs 中的信息已损坏,Git 无法继续创建 index.lock 文件。

快速修复:删除并重新添加遥控器。

-1 复制现有远程的 SSH git URL。您可以使用以下命令将其打印到终端:

git remote -v

2- 从本地 git repo 中删除远程:

git remote rm origin

3-将遥控器添加回您的本地仓库:

git remote add origin git@server-address.org:your-username/repo-name.git

4- 修剪远程来源 在线论坛上的用户报告说以下命令对他们有用:

git remote prune origin

5-清理和优化本地存储库 git gc --prune=now

您可以在本文中找到更多信息: https ://linuxpip.org/git-error-cannot-lock-ref/

于 2022-01-19T23:21:57.830 回答
1

我用过git prune origin,那确实奏效了。

于 2018-07-19T12:50:04.093 回答
1

写下可能导致此问题的特定案例。

有一天,我推送了一个名为“功能/子功能”的分支,同时在远程有“功能”分支。

该操作运行良好,我这边没有任何错误,但是当我的同事获取和/或拉出任何分支时,他们都有完全相同的错误消息unable to update local refcannot lock ref 'refs/remotes/origin/feature/subfeature.

这是通过删除featureremote( git push --delete origin feature) 上的分支然后git remote prune origin在我同事的 repo 上运行来解决的,该 repo 生成的消息包括* [pruned] origin/feature.

所以,我的猜测是git fetch试图在内部(.git/...)的 git 文件夹中创建subfeatureref feature,但创建文件夹失败,因为feature已经有 ref。

于 2018-11-07T09:01:08.283 回答
1

我有同样的问题。我按照以下步骤

1)将有问题的分支切换到其他分支

2)删除该分支

3)再次结帐。

注意:- 您可以隐藏未提交的更改并将其重新放回。

于 2016-05-27T16:47:27.077 回答
0
 # remove the reference file of the branch "lost"
 rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader

 # get all the branches from the master
 git fetch --all

 # git will "know" how-to handle the issue from now on
 #     From github.com:futurice/senzoit-www-server
 # * [new branch]      feature/v1.6.9-api-token-bot-reader ->
 # origin/feature/v1.6.9-api-token-bot-reader

 # and push your local changes
 git push
于 2017-06-13T07:43:44.443 回答
0

当 Mac 上的开发人员在分支名称中创建具有大于“>”符号的分支时,我们遇到了这个问题。

这在 TeamCity 和运行 SourceTree 的本地 Windows 计算机上造成了问题。BitBucket 让它顺利通过。

为了解决,用户删除了分支并重新创建了它。这很好很容易。

于 2019-08-22T01:16:54.630 回答
0

如果有人觉得这很有用,我会长期遇到这个问题,虽然不是经常出现,这是因为我在 Dropbox 中有 git 目录,将它从 Dropbox 中删除,一切都很好。

于 2020-08-25T08:23:29.043 回答
0

有相同的味精,但有一个目录,在拉动时收到一个失败的味精。

git --prone 也没有帮助我。原来有一个与远程创建的目录同名的文件。

必须去 .git\logs\refs\remotes\origin 并删除语言环境文件 - 然后再次拉动,一切都很好。

于 2016-08-11T11:17:14.777 回答
0

我在作曲家更新时遇到了同样的问题。但对我来说,它只有在我清除作曲家缓存并删除供应商文件夹的内容后才有效:

rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package
于 2015-08-11T15:44:19.310 回答
0

尝试从git bundle创建的文件克隆时遇到此问题,其他答案均无效,因为我无法克隆存储库(因此git gc,删除/编辑文件是不可能的)。

然而,还有另一种方法可以解决这个问题 - 文件的源文件.bundle以:

# v2 git bundle
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master

PACK.......p..x...Kj.0...: (and so on...)

只需使用 vim 删除第四行即可解决问题。

于 2016-05-30T13:58:40.280 回答
0

尝试这个:git branch --unset-upstream

我之前遇到过这个问题,但是当我在终端上看到这个命令时我才解决了这个问题。

于 2022-01-17T13:17:46.387 回答
0

今天刚遇到这个问题。

故障排除方法:在 Windows 服务器上使用 SourceTree,您可以尝试以管理员身份运行它。这解决了我在域中 Windows Server 2012 R2 上 Atlassian Source Tree 2.1.2.5 上“无法更新本地参考”的问题。

如果您也可以复制这种情况,则证明问题是由权限问题引起的。最好深入挖掘并找到根本原因 - 可能某些特定文件由其他用户拥有等等 - 否则会有一个不受欢迎的副作用:您必须在剩下的时间里以管理员身份运行 SourceTree。

于 2017-06-29T06:48:00.930 回答
0

删除并使用相同名称创建存储库时面临同样的问题。只有当我像下面这样重新设置远程 URL时它才有效;

git 远程设置 URL 源 [GIT_REPO_URL]

验证远程 URL:

git remote -v

现在,所有命令都应该照常工作。

于 2018-05-01T20:25:36.237 回答
0

我在使用 SourceTree 时遇到了这个问题。我试着再拉一次,它奏效了。我想我是巫术分支(结帐)太快了:)。

我的情况与发帖者的情况有些不同,因为我的存储库相对合作,没有任何明显的损坏。

于 2016-07-28T14:22:44.743 回答