Воссоздать 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.

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

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

Спасибо.


Правка:

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

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

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

1 4

1 ответ:

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

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

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