git拉取失败“无法解析引用”“无法更新本地引用”

使用git1.6.4.2,当我尝试git pull时,我得到这个错误:

error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directoryFrom 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,但没有用。

640616 次浏览

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

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

man 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 beencreated from prior invocations of git add.
Users are encouraged to run this task on a regular basis within each repository to maintain good diskspace utilization and good operating performance.

man git远程(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 beenremoved from the remote repository referenced by <name>, but are still locally available in"remotes/<name>".

这为我做了工作:

git gc --prune=now

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

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

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

我也遇到过。在我的情况下,坏裁判是主人,我做了以下事情:

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

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

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

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

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

rm -rf vendor/*git gc --prune=nowgit pullcomposer clear-cachecomposer update my/package

我能够与

git remote update --prune

我有同样的问题,我遵循以下步骤

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

2)删除该分支

3)再次结帐。

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

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

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

# v2 git bundle9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
PACK.......p..x...Kj.0...: (and so on...)

简单地删除第四行与vim固定的问题。

为了回答这个问题,这个问题是在您的本地有一些关于远程的信息并且有人更改了一些使远程和您的更改不同步的东西时出现的。

我得到这个问题,因为有人删除了远程分支,并再次创建了同名。

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

git remote prune origin

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

在此处输入图片描述

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

我的情况与海报有点不同,因为我的存储库相对合作,没有任何明显的损坏。

在我的情况下,问题在我删除目录.git下的所有删除引用文件后得到解决。

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

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

我刚刚删除了所有文件,并运行了gc prune

git gc --prune=now

在那之后,一切都很好。

具有相同的msg但具有目录,在拉取时获得失败的msg。

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

必须转到. git\logs\refs\远程数据库\起源并擦除语言环境文件-然后再次拉取,一切都好。

如果git gc --prune=now帮不了你(像我这样的坏运气)

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

试试这个:

git pull origin Branch_Name

Branch_Name,您当前所在的分支。

如果您只执行git pull,它也会提取所有其他创建的分支名称。

这就是你得到这个的原因:

! [new branch]      split-css  -> origin/split-css  (unable to update local ref)

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

[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25][I]> git fetcherror: 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
 # 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 mastergit 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 changesgit push

今天刚碰到问题。

故障排除方法:使用Windows服务器上的SourceTree,您可以尝试以管理员身份运行它。这修复了我在域中的Windows Server 2012 R2上的艾特莱森源代码树2.1.2.5上“无法更新本地引用”的问题。

如果您也可以复制这种情况,则证明问题是由权限问题引起的。最好向下钻取并找到根本原因-可能某些特定文件归其他用户所有等-否则会产生不受欢迎的副作用:您将不得不在剩余的时间内以管理员身份运行SourceTree。

执行以下命令:

rm .git/refs/remotes/origin/master
git fetch
git branch --set-upstream-to=origin/master

以防万一,如果你需要知道什么是.git/refs/remotes/origin/master,您将阅读移除部分git参考.

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

git远程设置url来源[GIT_REPO_URL]

验证远程URL:

git remote -v

现在,所有命令都应该像往常一样工作。

我只是想添加一个可能的原因损坏的Git引用。

可能的根本原因

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

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

示例

错误信息:

无法锁定引用'refs/远程/起源/一些/分支':无法解析引用'refs/远程/起源/一些/分支':引用中断

解决方案:

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

我使用了git prune origin,它完成了工作。

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

有一天,我推了一个名为“功能/子功能”的分支,而远程上有“功能”分支。

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

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

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

试试看:

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

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

这导致TeamCity和运行SourceTree的本地Windows计算机出现问题。BitBucket让它顺利通过。

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

如果此错误“无法更新本地ref”再次发生,即使在应用Vojtech VitekMichel Krämer的答案后,您也可能在本地AND主存储库上有一个错误的ref。

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

rm .git/refs/remotes/origin/mastergit fetchgit gc --prune=nowgit remote prune origin

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

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

为了解决这个问题:

git fetch --prunegit fetch --allgit pull

额外阅读-参考Github留档

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

<强>--所有获取所有遥控器。

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

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

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

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

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

之后,我从github收到了这条消息。

没有当前分支机构的跟踪信息

所以接下来我要解决的是:

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

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

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

错误:无法锁定ref"只是意味着 /refs中的信息已损坏,Git无法继续创建index.lock文件。

快速修复:删除并重新添加远程。

1-复制现有遥控器的SSHgit URL。您可以使用以下命令将其打印到终端:

git remote -v

2-从本地git存储库中删除遥控器:

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/

当它是由Google Drivedesktop.ini文件引起时

适用于Windows的Google Drive客户端在每个文件夹中创建desktop.ini文件。如果您的git存储库位于正在与Google Drive同步的目录中,那么desktop.ini文件将导致git存储库失败,例如:

cannot lock ref 'refs/remotes/origin/desktop.ini': unable to resolve reference 'refs/remotes/origin/desktop.ini': reference broken

要解决此错误,您可能需要删除git存储库中的desktop.ini文件。

如果您有WSL设置,那么您可以使用以下命令删除desktop.ini文件:

注意:⚠️此命令将删除<project_directory>中所有.git目录中的所有desktop.ini文件。

find <project_directory> -type d -name .git -print0 | xargs -0 -I {} find {} -type f -name desktop.ini -print0 | xargs -0 -I {} rm -vf {}

如果您只想删除特定.git目录中的desktop.ini文件,那么您可以使用以下命令:

find <.git_directory> -type f -name desktop.ini -print0 | xargs -0 -I {} rm -vf {}
$ rm .git/refs/remotes/origin/master
$ git fetch

bitbucket.org:xx/mkyong-tutorials

df0eee8..3f7af90  master     -> origin/master
$ git pull

已经更新了。

从项目中手动删除特定分支的文件

.git/refs/remotes/origin/mastergit gc --prune=nowgit pull

尝试了这些,但没有为我工作:

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

我必须通过删除本地文件夹并再次克隆来修复此问题。