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 помогла мне только сделать выборку один раз. Затем сообщение вернется снова.

Что на самом деле помогло в этой ситуации решить проблему навсегда:

  1. перейдите в подпапку.git моего локального хранилища;
  2. файл с открытым упакованным-refs;
  3. найти строку с именем ветки из сообщения об ошибке;
  4. удалите его из этого файла;
  5. теперь вы можете делать выборку или тянуть все, что вам нравится.

Ответ 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.

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

  1. Сначала я совершил все локальные изменения в локальном филиале, которые давали мне эту проблему.
  2. Созданы git-патчи для моего ветки.
  3. Удалил мой локальный филиал.
  4. Применил следующее исправление
  5. Проверьте удаленную ветку после запуска git fetch
  6. Применил необходимые файлы исправлений к локальной ветке.

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

Ответ 4

Вот шаги, которые исправили это для меня:

  1. Удалите файл .git/packed_refs
  2. Потяните.
  3. Запустите git pack-refs чтобы воссоздать файл pack_refs.

Для справки см. Https://git-scm.com/docs/git-pack-refs

Ответ 5

Несколько решений не совсем разрешили, но я закончил повторное клонирование

Ответ 6

У меня была похожая проблема, но я не мог отправить свой коммит из локального ветки в удаленный. Заглянув внутрь исходного дерева под моими удаленными ветвями, моя ветка внезапно не существовала. Я попытался ответить @Dudar, но ветка не была упомянута в файле pack-refs. Итак, что я сделал:

  1. перейдите в .git\refs\remotes\origin\feature подпапку моего локального репозитория;
  2. удалите файл, названный моей веткой, который вызвал проблему;
  3. нажмите мои изменения

Примечание. Моя ветвь существовала в подпапке происхождения, называемой "функция".