Sourcetree/GIT - Невозможно заблокировать ref/reference, если вытягиваете
Сотрудник и я работаем в одной ветке в течение недели, постоянно подталкивая/вытягивая изменения и внезапно сегодня, я ударил "тянуть", чтобы увидеть, были ли какие-то изменения, которые мне нужно было тянуть, и я получил ошибку,
Кстати, это в sourcetree. Ошибка:
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch origin
error: cannot lock ref 'refs/remotes/origin/angular_removal': unable to resolve reference 'refs/remotes/origin/angular_removal': reference broken
From https://bitbucket.org/colossus
! [new branch] angular_removal -> origin/angular_removal (unable to update local ref)
Я в sourcetree, у которого есть терминал, встроенный, но я не могу найти разрешение здесь.
Ответы
Ответ 1
Текст ошибки немного отличался для меня, как: unable to update local ref it is [hash_code_1] but expected [hash_code_2]
.
Таким образом, команда, подобная rm -rf.git/refs/remotes/origin/angular_removal
помогла мне только сделать выборку один раз. Затем сообщение вернется снова.
Что на самом деле помогло в этой ситуации решить проблему навсегда:
- перейдите в подпапку.git моего локального хранилища;
- файл с открытым упакованным-refs;
- найти строку с именем ветки из сообщения об ошибке;
- удалите его из этого файла;
- теперь вы можете делать выборку или тянуть все, что вам нравится.
Ответ 2
Принятое решение предоставляет подробности только о том, как ОП обошел проблему, и это не окончательный ответ.
Ради таких людей, как я, которые попали сюда из Google, вот решение, которое действительно работает.
Допустим, если сообщение об ошибке выглядит следующим образом,
error: cannot lock ref 'refs/remotes/origin/angular_removal': unable to resolve reference 'refs/remotes/origin/angular_removal': reference broken
Здесь нарушающим элементом является поврежденный файл с именем refs/remotes/origin/angular_removal
, который находится в скрытой папке .git
.
Чтобы это исправить, выполните следующие команды в корневом каталоге своего хранилища.
rm .git/refs/remotes/origin/angular_removal
git fsck
Одна только первая команда должна решить проблему, поскольку git
пытается повторно инициализировать отсутствующие ссылки.
Команда git fsck
предназначена для проверки работоспособности хранилища.
ПРИМЕЧАНИЕ: файл ref
будет другим для других. Так что убедитесь вы используете имя файла ref
из полученного сообщения об ошибке. **
Ответ 3
Просто случилось со мной; одна из моих ветвей ref под моим псевдонимом была повреждена. Fix:
rm <root of repository>.git/refs/remotes/origin/<your alias>
git fetch
Вы можете использовать rd/s
вместо rm
для Windows.
Ниже приведены подробные шаги, которые я предпринял для устранения проблемы. Вы можете пропустить следующие шаги:
- Сначала я совершил все локальные изменения в локальном филиале, которые давали мне эту проблему.
- Созданы git-патчи для моего ветки.
- Удалил мой локальный филиал.
- Применил следующее исправление
- Проверьте удаленную ветку после запуска git fetch
- Применил необходимые файлы исправлений к локальной ветке.
Это заставило git восстановить файл ref. После этого все снова работало так, как ожидалось.
Ответ 4
Вот шаги, которые исправили это для меня:
- Удалите файл
.git/packed_refs
- Потяните.
- Запустите
git pack-refs
чтобы воссоздать файл pack_refs.
Для справки см. Https://git-scm.com/docs/git-pack-refs
Ответ 5
Несколько решений не совсем разрешили, но я закончил повторное клонирование
Ответ 6
У меня была похожая проблема, но я не мог отправить свой коммит из локального ветки в удаленный. Заглянув внутрь исходного дерева под моими удаленными ветвями, моя ветка внезапно не существовала.
Я попытался ответить @Dudar, но ветка не была упомянута в файле pack-refs.
Итак, что я сделал:
- перейдите в .git\refs\remotes\origin\feature подпапку моего локального репозитория;
- удалите файл, названный моей веткой, который вызвал проблему;
- нажмите мои изменения
Примечание. Моя ветвь существовала в подпапке происхождения, называемой "функция".