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, но это не помогло.


person Gabrielle    schedule 08.06.2010    source источник
comment
stackoverflow.com/questions/19548199/   -  person Amit Yadav    schedule 19.11.2014
comment
Вы можете вручную удалить master файл в расположении ниже: PROJECT\.git\refs\remotes\origin\master   -  person Shurvir Mori    schedule 29.01.2021


Ответы (30)


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

$ 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>".            
person Vojtech Vitek    schedule 08.09.2011
comment
Почему это работает? Какую проблему он устраняет? - person Ikke; 14.02.2017
comment
У меня сработала вторая команда. По-видимому, у меня была неработающая ссылка на только что созданную удаленную ветку. Не знаю, как это случилось, но рад, что это было простое решение. Спасибо, Витек! - person JGTaylor; 20.07.2017
comment
У меня это сработало. Но после запуска этих кодов мне пришлось снова запустить pull request. Спасибо за помощь - person David; 28.04.2018
comment
Это сработало отлично! Мне также хотелось бы объяснить, что это делает и почему это сработало. Спасибо! - person ArielSD; 18.09.2018
comment
Будет ли команда git remote prune origin выполняться в моей локальной рабочей копии или в удаленном репозитории? - person user1438038; 17.12.2018
comment
@ user1438038 Он не должен удалять какие-либо ветки, а только обновлять удаленные ссылки в вашей локальной рабочей копии. Подробнее здесь: stackoverflow.com/questions/20106712/ - person Zengineer; 02.03.2019
comment
@vojtech vitek как это исправить на сервере? - person Nick Turner; 18.06.2020
comment
git gc --prune=now выводит ошибки: error: bad ref for .git/logs/refs/remotes/origin/feature/gal-42, затем fatal: bad object refs/remotes/origin/feature/GAL-42, а затем fatal: failed to run repack. git fetch после этого по-прежнему не работает. - person OzrenTkalcecKrznaric; 08.01.2021
comment
Как ни странно, в той же ветке мне пришлось дважды запустить git remote prune origin, прежде чем проблема была исправлена. - person bytedev; 09.06.2021

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

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

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

person Michel Krämer    schedule 17.03.2013
comment
Я сделал то же самое, и моя проблема была решена. Когда я открыл файл в Notepad ++, он явно был поврежден. - person theMayer; 26.10.2013
comment
убедитесь, что вы выбрали файл, с которым возникают проблемы, а не мастер - person bia.migueis; 20.01.2014
comment
@ bia.migueis: это ничего не повредит, если вы случайно удалите мастер - он просто обновится при следующей загрузке. - person naught101; 07.07.2014
comment
Сделал это. Теперь появляется еще одна ошибка: ошибка: невозможно разрешить ссылку ORIG_HEAD: нет ошибки. Изменить: исправлена ​​вторичная ошибка с rm .git / ORIG_HEAD - person pk1557; 11.05.2015
comment
Спасибо за это решение. В моем случае файл для ветки был пуст. Как это произошло, остается загадкой, потому что вчера я все еще фиксировал изменения для этой ветки из той же папки. После его удаления и выполнения выборки проблема была устранена. - person racs; 26.06.2015
comment
Сработало для меня, но моя проблема заключалась в теге, поэтому, как упоминалось в @ bia.migue, мне нужно было удалить файл в .git/refs/tags/ - person Tom Saleeba; 11.08.2015
comment
Есть идеи, почему это происходит? Я просто нажимаю, вытягиваю, извлекаю, перебазирую, объединяю как обычно, а затем я сталкиваюсь с этой ошибкой. Это проблема в определенных версиях Git? - person crmpicco; 11.08.2015
comment
@crmpicco AFAIR моя была повреждена из-за сбоя компьютера - person Michel Krämer; 12.08.2015
comment
@ MichelKrämer Интересно. Например, у вас был WSOD в Windows или что-то подобное? Когда это случилось со мной в первый раз, я подумал, что это произошло из-за того, что я не выключил свою виртуальную машину должным образом, однако, похоже, это все еще происходит, хотя сейчас я это делаю. - person crmpicco; 12.08.2015
comment
@crmpicco Я не думаю, что это был BSOD (со мной не случалось довольно долгое время). Должно быть отключение электричества или что-то в этом роде. Не могу вспомнить. Кстати, проблема больше никогда не возникала. - person Michel Krämer; 14.08.2015
comment
После выполнения: rm .git / refs / remotes / origin / master, git fetch удалит ошибку ref ... но когда я снова сделаю git pull, появится та же ошибка ... поэтому я сделал git gc --prune = now. .и заработало ... - person abyin007; 14.09.2015
comment
Была точно такая же проблема; файл был заполнен символами NULL: - / - person NKCSS; 16.10.2015
comment
Если это подмодуль, может быть немного сложно найти исх. Сначала проверьте, является ли .git папкой, выполнив ls -la, если нет, просмотрите содержимое файла .git, чтобы найти фактическую папку .git, в которой находятся ссылки. .git содержимое файла в моем случае: gitdir: ../.git/modules/my-submodule-name - person CCoder; 30.11.2016
comment
У меня была эта проблема с несколькими ветвями, и я их все подтолкнул, поэтому я просто удалил всю исходную папку - person George Lanetz; 12.03.2018
comment
Дважды за последний год я возвращался, чтобы исправить это, и снова, это единственное исправление, которое действительно работает. - person Ted; 16.04.2020
comment
Сработало у меня! Спасибо :) - person Vaibhav Miniyar; 09.11.2020
comment
Это сработало для меня - person Arun Rana; 23.02.2021
comment
Ни одно из других решений не помогло мне, пока я не сделал это (prune ничего не сделал). Я бегу rm .git/refs/remotes/origin/MY_BROKEN_BRANCH_NAME - person MarcinWolny; 23.03.2021

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

git gc --prune=now
person Bernd    schedule 30.09.2011
comment
Это сработало. Спасибо, что спасли мне день! @Bernd Любое возможное объяснение команды? - person nashcheez; 16.11.2016
comment
git gc docs находятся здесь - person BigRon; 21.09.2018
comment
У меня тоже сработало. Не нужно было запускать git remote prune origin - person Airwavezx; 17.01.2019
comment
Пришлось переместить плохие ссылки, о которых говорил терминал, из папки .git до того, как эта команда будет запущена, но после этого эта команда запустилась, и я смог весело продолжить свое путешествие по кодированию! - person TripWire; 12.11.2020
comment
В моем случае выполнение этой команды обвинило меня в проблеме: fatal: bad object refs/remotes/origin/HEAD fatal: failed to run repack поэтому я запустил rm .git/refs/remotes/origin/HEAD и позже git gc --prune=now, и теперь репо чистое, как новое. - person Josep Jesus Bigorra Algaba; 01.03.2021

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

person Brian van Rooijen    schedule 19.06.2015
comment
вот и получилось! Но просто из любопытства знаете, почему возникла эта ошибка? (все работало нормально, а потом вдруг в один прекрасный день выскочила эта ошибка). А также знаете, как это решило удаление файла? - person Shreyans; 02.04.2016
comment
Приятно слышать, что это тоже исправило это за вас. Честно говоря, я понятия не имею, что вызвало появление ошибки. Я подумал, что один из файлов в папке рассинхронизировался. Поскольку ни одно из других исправлений, которые я нашел, у меня не сработало, я использовал это как последнее средство. - person Brian van Rooijen; 04.04.2016
comment
Сработало отлично! Обратите внимание, что вам нужно удалить все файлы, вызывающие проблему (на основе полученного отчета об ошибке), как если бы вы удалили только один и попытались его вытащить, он вернется. - person Rayee Roded; 21.10.2017
comment
Одной из возможных причин может быть сбой системы, как я описал в моем ответе. Многие приложения с графическим интерфейсом пользователя Git периодически запускают Git в вашем репозитории (для обновления статуса), и если ваша система выйдет из строя, когда Git манипулирует ссылками, они могут быть переписаны с NULLs. - person David Ferenczy Rogožan; 24.07.2018
comment
Моя система вышла из строя как раз перед завершением операции синхронизации, и это помогло. - person Padmika; 27.11.2020

Попытайся:

git gc --prune=now

git remote prune origin

git pull
person annelorayne    schedule 23.11.2018
comment
Хотя это может ответить на вопрос авторов, в нем отсутствуют некоторые поясняющие слова и / или ссылки на документацию. Фрагменты исходного кода не очень полезны без некоторых фраз. Вы также можете найти как написать хороший ответ очень полезным. Пожалуйста, отредактируйте свой ответ. - person Roy Scheffers; 24.11.2018
comment
В том-то и дело. Недостаточно исправить код и все. Я надеюсь есть объяснение - person Musikero31; 15.06.2019
comment
git gc --prune = теперь обновляет локальный репозиторий при удалении ненужных файлов. У меня работает нормально. - person Vasyl Gutnyk; 19.04.2020

Я просто хотел бы добавить одну из возможных причин неработающей ссылки Git.

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

В моей системе (64-разрядная версия Windows 7) возникает BSOD , некоторые из сохраненных справочных файлов (скорее всего, в настоящее время открываются / записываются, когда произошел BSOD) перезаписываются символами NULL (ASCII 0).

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

Пример

Сообщение об ошибке:

не удается заблокировать ссылку "refs / remotes / origin / some / branch": невозможно разрешить ссылку "refs / remotes / origin / some / branch": ссылка не работает

Решение:

Удалите ссылку refs/remotes/origin/some/branch, которая хранится в файле %repo_root%/.git/refs/remotes/origin/some/branch.

person David Ferenczy Rogožan    schedule 22.05.2018
comment
Тот же сценарий для 64-разрядной версии Windows 10 - работа в репозитории git при возникновении BSOD. error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken. Попытка git pull после удаления первого файла вернула fatal: update_ref failed for ref 'HEAD': cannot lock ref 'HEAD': unable to resolve reference 'refs/heads/master': reference broken. После удаления второго файла git pull origin master прошло успешно. - person c.j.mcdonn; 19.09.2018

Объяснение: похоже, что ваши ветки удаленного репо (в Github / bitbucket) были удалены, хотя ваши локальные ссылки не были обновлены и указывают на несуществующие ссылки.

Чтобы решить эту проблему:

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

Для дополнительного чтения - ссылка на документацию Github:

git-fetch - загружать объекты и ссылки из другого репозитория.

--all Получить все пульты дистанционного управления.

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

person avivamg    schedule 05.11.2019
comment
OMG, это отлично работает! - person Fernando Gonzalez Sanchez; 10.12.2020

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

rm .git/refs/remotes/origin/master

git fetch

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

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

person Matias Sebastiao    schedule 05.07.2017
comment
Вы можете объяснить, что такое .git / refs / remotes / origin / branchName? Это решение сработало для меня - person caitcoo0odes; 13.11.2017

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

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

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

person Noel Tock    schedule 27.11.2012
comment
Была та же проблема, но файл .git/refs/remotes/origin/master был просто пустым. Решил проблему сняв. - person zinovyev; 30.12.2016

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

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

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

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

git gc --prune=now

После этого все работает нормально.

person Uri Shtand    schedule 03.08.2016
comment
В моем случае я просто удаляю .git / refs / remotes, а затем обновляю и нажимаю на сервер, и это сработало. - person Faraz Ahmed; 07.11.2017
comment
Спасибо, Ури. В моем случае я просто удалил файлы в refs / remotes / origin / feature и просто сделал - git pull - person Deepboy; 17.04.2019

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
person marczych    schedule 10.05.2017
comment
Ваш пример кажется неполным: он не показывает --prune, который я вижу. Также совет: удалите бесполезные подсказки пароля после вставки примеров. - person MarkHu; 05.08.2017
comment
Вы абсолютно правы - я не стал выводить вывод команды fetch, но просто включил его в пример. Спасибо за совет по удалению запроса пароля! - person marczych; 05.08.2017

Если эта ошибка «невозможно обновить локальную ссылку» повторяется, даже после применения ответа Vojtech Vitek < / strong> или Мишель Кремер, возможно, у вас может быть плохой рефери в вашем местном И главном репозиторий.

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

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

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

person Inyoka    schedule 08.10.2019
comment
Спасибо за это. обратите внимание, что я заменил 'master' веткой, в которой произошел сбой, например - rm .git / refs / remotes / origin / develop - person Damien Sawyer; 03.01.2020

Для меня я решил это так:

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

После этого я получаю это сообщение с github.

Для текущего филиала нет информации об отслеживании

Итак, следующее, что я сделал, чтобы исправить это, было:

git branch --set-upstream-to=origin/master master
git pull
person Deviance    schedule 01.09.2020

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

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

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

git remote prune origin

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

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

person Abhijeet Kamble    schedule 05.07.2016

Попробуй это:

git pull origin Branch_Name

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

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

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

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

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

git remote update --prune
person user1238353    schedule 07.01.2016

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

person Nathan Wallace    schedule 10.03.2015
comment
Здесь та же проблема - у нас также была проблема с именованием корпусов Mac / ПК, из-за которой было сложно обнаружить (одно имя было написано с большой буквы, а другое нет - и это работало на ПК, но не на Mac) - person rocksteady; 10.06.2019

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

Я удалил проект локально и снова клонировал весь проект.

person Eric Chen    schedule 21.03.2017
comment
Это сообщение об ошибке, поэтому я купил новый компьютерный подход, от которого я не ожидал получить какие-либо положительные голоса на этом веб-сайте. - person Stephan Vierkant; 04.06.2019

Я использую Tower, и по какой-то причине имя моей папки было .git/refs/remotes/origin/Github. Изменение регистра на строчные .git/refs/remotes/origin/github решило проблему.

person split19    schedule 15.04.2020

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

1) переключите свою ветку, в которой возникла проблема, на другую ветку

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

3) еще раз оформить заказ.

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

person user2619659    schedule 27.05.2016

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

person TheFakeCake    schedule 19.07.2018

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

Однажды я нажал ветку с именем «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 ref в папке feature на git внутри (.git / ...), но создание папки не удалось, потому что уже было feature ref.

person ik1ne    schedule 07.11.2018

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

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

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

person Krzysztof Bociurko    schedule 30.05.2016

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

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

person Pysis    schedule 28.07.2016

Было то же сообщение, но с каталогом, получилось неудачное сообщение при извлечении.

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

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

person Asaf Maoz    schedule 11.08.2016

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

git источник удаленного набора URL [GIT_REPO_URL]

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

git remote -v

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

person Ricky Boy    schedule 01.05.2018

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

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

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

person Lionet Chen    schedule 29.06.2017
comment
Что ж, я бы не рекомендовал это. У вас будет еще больше файлов с неправильными разрешениями. И вам нужно будет запускать все, что манипулирует файлами репозитория, от имени администратора. Не лучше ли сразу исправить разрешения? - person David Ferenczy Rogožan; 24.07.2018
comment
Ты прав. Но только после того, как он стал работать как администратор, я понял, что это проблема с разрешением. Так что это был шаг в моей диагностической процедуре, а не идеальное решение как таковое. - person Lionet Chen; 25.07.2018
comment
Конечно. Но многие пользователи могут просто принять ваш ответ как решение, не зная о последствиях. Может быть, лучше, если вы добавите исправление разрешений в качестве предлагаемого решения. - person David Ferenczy Rogožan; 25.07.2018

У нас возникла эта проблема, когда разработчик на Mac создал ветку с символом «>» в ​​имени ветки.

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

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

person dylanT    schedule 22.08.2019

Если кто-то сочтет это полезным, я столкнулся с этой проблемой хронически, хотя и не постоянно, потому что у меня был каталог git в Dropbox, я удалил его из Dropbox, и все было в порядке.

person agorapotatoes    schedule 25.08.2020