git pull завершается ошибкой "невозможно разрешить ссылку" "невозможно обновить локальную ссылку" - PullRequest
505 голосов
/ 08 июня 2010

Используя 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, но это не помогло.

Ответы [ 25 ]

781 голосов
/ 08 сентября 2011

Попробуйте очистить ваш локальный репозиторий с помощью:

$ 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>".            
512 голосов
/ 17 марта 2013

Случилось и со мной. В моем случае, плохой реф был мастером, и я сделал следующее:

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

Это заставило git восстановить файл ref. После этого все снова заработало как положено.

114 голосов
/ 30 сентября 2011

Это сделало работу за меня:

git gc --prune=now
68 голосов
/ 19 июня 2015

У меня сработало удаление файлов, которые выдают ошибки из папки .git/refs/remotes/origin/.

42 голосов
/ 05 июля 2017

Выполните следующие команды:

rm .git/refs/remotes/origin/master

git fetch

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

На всякий случай, если вам нужно узнать, что такое .git/refs/remotes/origin/master, вы прочитали бы раздел Remotes в Git References .

37 голосов
/ 27 ноября 2012

У меня возникла та же проблема, и я решил ее, перейдя в файл, в котором она ошибалась:

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

Этот файл был полон нулей, я заменил его последней ссылкой из github.

34 голосов
/ 03 августа 2016

В моем случае проблема была решена после того, как я удалил все справочные файлы удаления в каталоге .git.

Если вы посмотрите на сообщение, оно сообщит вам, какие файлы вам нужноdelete (в частности).

Файлы для удаления находятся под .git/refs/remotes.

Я только что удалил все файлы и запустил gc prune

git gc --prune=now

После этого все работает просто отлично.

30 голосов
/ 23 ноября 2018

Попробуйте:

git gc --prune=now

git remote prune origin

git pull
29 голосов
/ 22 мая 2018

Я просто хотел бы добавить, как может случиться, что ссылка прервется.

Возможная основная причина

В моей системе (Windows 7 64-bit), когда 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

17 голосов
/ 11 мая 2017

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

Предполагается, что ветка-нарушитель была удалена на удаленном компьютере.

...