Воссоздать Git Ref после фатальной ошибки

Недавно мне пришлось выполнить жесткую перезагрузку, и теперь я получаю сообщение об ошибке в git, когда пытаюсь получить доступ к определенной ветке (это не происходит при доступе к другим веткам):

$git checkout branchName
fatal: failed to read object ebca165c3ec7ecd7124f41983dd264e4e1dc0125: Invalid argument

Проблема аналогична описанной здесь: Как восстановить поврежденный репозиторий git?, но отличается тем, что я сейчас я не в этой ветке для выполнения git status. Кроме того, если я позвоню git reflog, я получу такое же сообщение об ошибке.

Я пытался удалить рассматриваемую ветку, используя git branch -d branchName и git branch -D branchName, но безуспешно.

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

Возможное решение состоит в том, чтобы восстановить текущую ссылку из каждой из существующих отдельных ветвей, исключая недопустимую ветвь?

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

Спасибо.


Редактировать:

Запуск git fsck --full я получаю следующее сообщение:

$git fsck --full
fatal: failed to read object 687f624bd239de165307d18a8904a77adb32c8a1: Invalid argument

... что странно, потому что, похоже, это относится к другому хэшу.


person ServAce85    schedule 29.02.2012    source источник
comment
что произойдет, если вы запустите «git log ‹corrupt_branchname›»? Может быть, вы можете получить SHA коммита перед перебазированием и проверить это   -  person carpii    schedule 02.03.2012
comment
Также попробуйте git reflog и посмотрите, сможете ли вы проверить (или сбросить) фиксацию до перебазирования таким образом. Прежде чем попробовать что-либо из этого, я бы действительно взял полную копию вашего репозитория в безопасное место.   -  person carpii    schedule 02.03.2012
comment
Скопировано... Теперь я попробовал git log branchName, и он выдает первую ошибку (ту, что относится к ebca16 SHA. Я попробовал git reflog и снова получаю ту же ошибку.   -  person ServAce85    schedule 02.03.2012
comment
Почему бы вам не восстановить репозиторий из резервной копии?   -  person hakre    schedule 11.03.2012


Ответы (1)


Наконец-то я нашел ответ на этот вопрос...

Просто зайдите в папку .git и удалите refs/heads/BadBranch

Это позволяет остальным branches работать как обычно, теряя при этом только информацию из поврежденного branch.

person ServAce85    schedule 12.03.2012