Visual Studio не видит локальный репозиторий. Неустранимый: не может заблокировать ref 'HEAD' - PullRequest
1 голос
/ 25 октября 2019

У меня был локальный репозиторий в моем проекте Visual Studio. Сделал коммит. Чуть позже электричество было отключено. Сейчас я открываю проект, репозитория нет. При этом он остался в папке проекта. Как вернуть его в Visual Studio?

enter image description here enter image description here

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

fatal: невозможно заблокировать ref 'HEAD': невозможно разрешить ссылку 'refs /head / master': ссылка повреждена

Ответы [ 2 ]

2 голосов
/ 25 октября 2019

Очевидно, что ваш собственный ответ решил вашу проблему здесь.

Другая вещь, которая обычно происходит, когда питание внезапно отключается (или происходит сбой хоста), это то, что специальный файл HEAD (.git/HEAD) получаетуничтожен или поврежден.

Git хранит информацию о ветках в нескольких местах:

  • Специальный файл HEAD обычно содержит имя текущей ветви .

    При проверке .git/HEAD вы увидите, например, текст ref: refs/heads/master, если вы сделали git checkout master, или ref: refs/heads/feature, если вы сделали git checkout feature.

    Этот файл, как Git знает, в какой ветке вы находитесь. Этот файл обновляется довольно часто.

  • Файлы с именами .git/refs/heads/master, .git/refs/heads/feature и т. Д. Часто содержат правильный хэш-идентификатор для каждой из этих ветвей.

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

  • Файл с именем .git/packed-refs часто содержит хэш-идентификаторы для каждой ветви и тегаимя или какое-то их подмножество. Это правильные хэш-идентификаторы, если они не заменены какой-либо другой информацией. Этот файл пишется гораздо реже.

При сбое питания или сбое компьютера наиболее часто обновляются файлы, которые были обновлены в последнее время (поскольку сам компьютери / или носитель данных задерживает фактическую запись данных, чтобы объединить все вместе для повышения эффективности). Так что .git/HEAD и .git/refs/heads/<em>name</em> относятся к файлам, которые могут быть повреждены в этих событиях.

Обратите внимание, что другие файлы в .git/objects могут также быть поврежденным. Вы можете проверить это, используя git fsck. Тем не менее, git fsck также печатает информационные сообщения о нормальных условиях, так что не беспокойтесь, если вы получаете различные сообщения о «висячих» коммитах, тегах, деревьях и BLOB-объектах или случайное «предупреждающее» сообщение, подобное этому:

warning in tag d6602ec5194c87b0fc87103ca4d67251c76f233a: missingTaggerEntry: invalid format - expected 'tagger' line
2 голосов
/ 25 октября 2019

Я пошел в файл \.git\logs\refs\heads\master и взял затем последний ref

enter image description here

Затем пошел к \.git\refs\heads\master и заменил ref

enter image description here

А теперь Visual Studio видит все коммиты

enter image description here

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