Восстановить Git Ref после фатальной ошибки - PullRequest
4 голосов
/ 29 февраля 2012

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

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

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

Спасибо.

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

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

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

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

1 Ответ

1 голос
/ 12 марта 2012

Я наконец-то узнал, как ответить на этот вопрос ...

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

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

...