Git pull не удается "не удалось разрешить ссылку", "не удалось обновить локальную ссылку",

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

Это помогло мне:

git gc --prune=now

Ответ 4

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

Ответ 5

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

rm .git/refs/remotes/origin/master

git fetch

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

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

Ответ 6

Попробуйте:

git gc --prune=now

git remote prune origin

git pull

Ответ 7

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

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

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

Ответ 8

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

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

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

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

git gc --prune=now

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

Ответ 9

Я просто хотел бы добавить, как это может произойти, если ссылка не работает.

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

В моей системе (Windows 7 64-bit), когда происходит BSOD happens, некоторые из сохраненных справочных файлов (наиболее вероятно, в настоящее время открываются/записываются, когда произошло 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

Ответ 10

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

git gc --prune=now

В SourceTree требуется еще одно исправление.

Ответ 11

git fetch --prune исправил эту ошибку для меня:

[[email protected]] - [~/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
[[email protected]] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
 - [deleted]               (none)     -> origin/user/janek/integration

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

Ответ 12

Чтобы ответить на это очень коротко, эта проблема возникает, когда у вашего локатора есть некоторая информация о удаленном компьютере, и кто-то меняет что-то, что делает удаленный доступ и ваши изменения несинхронизированы.

Я получаю эту проблему, потому что кто-то удалил удаленную ветку и снова был создан с тем же именем.

Для решения таких проблем сделайте pull или fetch с удаленного.

git remote prune origin

или если вы используете какой-либо графический интерфейс, сделайте выборку с удаленного.

введите описание изображения здесь

Ответ 13

Если git gc --prune=now не поможет вам. (неудача, как я)

Что я сделал, так это удалить проект в локальном режиме и снова повторить весь проект.

Ответ 14

Я смог работать с

git remote update --prune

Ответ 15

Попробуйте следующее:

git pull origin Branch_Name

Branch_Name, ветку, в которую вы сейчас находитесь.

Если вы выполняете только git pull, он также вытягивает все другие созданные имена ветвей.

Вот почему вы получаете это:

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

Ответ 16

Для меня у меня была локальная ветвь с именем feature/phase2, а удаленная ветвь была названа feature/phase2/data-model. Конфликт именования был причиной проблемы, поэтому я удалил свою локальную ветку (вы могли бы переименовать ее, если у нее было что-то, что вам нужно было сохранить)

Ответ 17

У меня была такая же проблема. выполните следующие шаги

1) переключите свою ветку, которая выдает другой ветке

2) удалите эту ветвь

3) снова проверьте.

Примечание. - Вы можете заблокировать незафиксированные изменения и вернуть их обратно.

Ответ 18

Я использовал git prune origin, и это сработало.

Ответ 19

У меня была такая же проблема с обновлением композитора. Но для меня это работало только после того, как я очистил кеш композитора и удалив содержимое папки поставщика:

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

Ответ 20

Получив эту проблему при попытке клонирования из созданного файла 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 устраняет проблему.

Ответ 21

У меня была эта проблема при использовании SourceTree. Я попытался снова потянуться, и это сработало. Я думаю, что я был частыми ветвями (checkout) слишком быстро:).

Моя ситуация немного отличается от плаката, потому что мой репозиторий был относительно кооперативным, без какой-либо видимой коррупции.

Ответ 22

 # 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

Просто столкнулся с проблемой сегодня.

Метод устранения неполадок: Используя SourceTree на серверах Windows, вы можете попробовать запустить его как администратор. Это решает мою проблему "не удалось обновить локальную ссылку" в Atlassian Source Tree 2.1.2.5 на Windows Server 2012 R2 в домене.

Если вы можете слишком скопировать эту ситуацию, это доказывает, что проблема вызвана проблемой разрешения. Лучше детализировать и найти основную причину - вероятно, некоторые конкретные файлы принадлежат другим пользователям и тому подобное - в противном случае есть нежелательный побочный эффект: вам придется запускать SourceTree в качестве Администратора до конца вечности.

Ответ 24

Столкнулся с той же проблемой, когда хранилище было удалено и создано с тем же именем. Это сработало только когда я переустановил удаленный URL, как показано ниже;

git remote set-url origin [GIT_REPO_URL]

Проверьте удаленный URL:

git remote -v

Теперь все команды должны работать как обычно.

Ответ 25

Записать конкретный случай, который может вызвать эту проблему.

Однажды я нажал на ветку с именем "feature/subfeature", имея ветку "feature" на пульте.

Эта операция работала нормально, без каких-либо ошибок на моей стороне, но когда мои коллеги извлекли и/или вытащили какую-либо ветку, у всех них было одно и то же сообщение об ошибке unable to update local ref, cannot lock ref 'refs/remotes/origin/feature/subfeature.

Это было решено удалением ветки feature на удаленном компьютере (git push --delete origin feature) и последующим запуском git remote prune origin в репозитории моих коллег, который генерировал сообщения, включая * [pruned] origin/feature.

Итак, я предполагаю, что git fetch пытался создать ссылку subfeature в папке feature внутри git (.git/...), но создание папки не удалось, потому что уже была ссылка feature.

Ответ 26

Эта проблема возникла, когда разработчик на Mac создал ветку с символом больше, чем ">" в названии ветки.

Это вызвало проблемы в TeamCity и на локальных компьютерах под управлением Windows, работающих под управлением SourceTree. BitBucket пропустил его без проблем.

Для разрешения пользователь удалил ветку и пересоздал ее. Что было приятно и легко.

Ответ 27

Если эта ошибка "невозможно обновить локальную ссылку" повторяется, даже после применения ответа Vojtech Vitek или Мишеля Крэмера, возможно, у вас может быть неправильная ссылка на локальную ссылку AND master хранилище.

В этом случае вы должны применить оба исправления без натяжения или толкания между ними...

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

Постоянное разрешение для меня было достигнуто только после применения обоих исправлений перед push/pull.

Ответ 28

Я получал эту ошибку после запуска git fetch:

error: невозможно заблокировать ref 'refs/remotes/origin/branchname': ref refs/remotes/origin/featureEmailTemplate находится в 45c5f2ab... но ожидается d48af9... из https://.../... (не удалось обновить локальную ссылку)

Следующая команда исправила проблему:

git gc --prun = now

Ответ 29

Имел тот же самый msg, но с каталогом, получил неудачный msg при нажатии.

git - мне тоже не помогло. Оказывается, был файл с тем же именем, что и каталог, созданный удаленно.

Пришлось пойти в .git\logs\refs\remotes\origin и стереть файл локали - затем потянуть снова, все хорошо.