Очевидно, что ваш собственный ответ решил вашу проблему здесь.
Другая вещь, которая обычно происходит, когда питание внезапно отключается (или происходит сбой хоста), это то, что специальный файл 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