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

时间:2010-06-08 15:34:41

标签: git git-pull

使用git 1.6.4.2,当我执行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,但它没有帮助。

31 个答案:

答案 0 :(得分:763)

尝试使用以下方法清理本地存储库:

$ 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 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.

man 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>".            

答案 1 :(得分:498)

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

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

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

答案 2 :(得分:109)

这为我完成了这项工作:

git gc --prune=now

答案 3 :(得分:64)

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

答案 4 :(得分:41)

执行以下命令:

rm .git/refs/remotes/origin/master

git fetch

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

以防万一,如果你需要知道什么是   .git/refs/remotes/origin/master,您会阅读遥控器部分   在Git References

答案 5 :(得分:36)

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

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

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

答案 6 :(得分:34)

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

如果您查看该消息,它会告诉您需要删除哪些文件(具体而言)。

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

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

git gc --prune=now

之后,一切正常。

答案 7 :(得分:28)

我只想补充引用中断的方式。

可能的根本原因

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

正如其他人提到的那样,为了解决这个问题,只需删除那些无效的参考文件并重新获取或重新提取存储库。

实施例

错误: cannot lock ref 'refs/remotes/origin/some/branch': unable to resolve reference 'refs/remotes/origin/some/branch': reference broken

解决方案:删除文件%repo_root%/.git/refs/remotes/origin/some/branch

答案 8 :(得分:24)

尝试一下:

git gc --prune=now

git remote prune origin

git pull

答案 9 :(得分:17)

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

这假设在遥控器上删除了违规分支。

答案 10 :(得分:8)

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

为了解决此问题:

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

更多阅读-来自Github documentation的参考资料:

  

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

     

-全部   获取所有遥控器。

     

-修剪提取后,删除所有不再存在于远程的远程跟踪分支。

答案 11 :(得分:8)

要在非常短的时间内回答这个问题,当您的本地有一些关于遥控器的信息并且有人更改了使远程和您的更改不同步的内容时,会出现此问题。

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

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

git remote prune origin

或者如果您正在使用任何GUI,请从远程执行提取。

enter image description here

答案 12 :(得分:4)

如果再次出现此错误“无法更新本地参考”,即使在通过 Vojtech Vitek Michel Krämer 应用答案后,您可能对本地AND主存储库的引用不正确。

在这种情况下,您应同时应用两个修订,而不能在两者之间拉或推。

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

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

答案 13 :(得分:4)

如果git gc --prune=now没有帮助你。 (像我这样的运气不好)

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

答案 14 :(得分:3)

试试这个:

git pull origin Branch_Name

Branch_Name,您目前所在的分支。

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

你得到这个的原因是什么:

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

答案 15 :(得分:2)

我能够使用

git remote update --prune

答案 16 :(得分:2)

我正在使用Tower,由于某种原因,我的文件夹名称为day。将其更改为小写Period可解决此问题。

答案 17 :(得分:2)

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

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

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

当前分支没有跟踪信息

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

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

答案 18 :(得分:1)

我有同样的问题。我按照以下步骤进行操作

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

2)删除该分支

3)再次结账。

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

答案 19 :(得分:1)

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

答案 20 :(得分:1)

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

答案 21 :(得分:0)

使用SourceTree时遇到此问题。我试图再拉一次,但它有效。我想我的分支(结账)太快了:)。

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

答案 22 :(得分: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

答案 23 :(得分:0)

今天遇到了问题。

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

如果您可以复制这种情况,则证明问题是由权限问题引起的。深入挖掘并查找根本原因可能更好 - 可能某些特定文件归其他用户所有 - 否则会产生不受欢迎的副作用:您必须以管理员身份运行SourceTree永恒的剩余时间。

答案 24 :(得分: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删除第四行就解决了这个问题。

答案 25 :(得分:0)

在删除存储库并使用相同名称创建存储库时遇到同样的问题。它仅在我重新设置远程网址时才有效;

  

git remote set-url origin [GIT_REPO_URL]

验证远程网址:

git remote -v

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

答案 26 :(得分:0)

写下可能导致此问题的特定情况。

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

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

此问题的解决方法是删除远程(feature)上的git push --delete origin feature分支,然后在同事的仓库中运行git remote prune origin,生成包含* [pruned] origin/feature的消息。 / p>

因此,我的猜测是git fetch试图在内部git的subfeature文件夹中创建feature ref(.git / ...),但是由于存在{ {1}}已经引用。

答案 27 :(得分:0)

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

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

为解决此问题,用户删除了分支并重新创建了该分支。很好,很容易。

答案 28 :(得分:0)

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

rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package

答案 29 :(得分:0)

万一有人觉得这很有用,我会长期(尽管不是经常)遇到这个问题,这是因为我在Dropbox中有git目录,将其从Dropbox中删除了,一切都很好。

答案 30 :(得分:-1)

有相同的消息,但有一个目录,拉上一个失败的消息。

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

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