Для меня я включил TRIM в OS X с SSD не от Apple (что не рекомендуется) и, очевидно, вызвал различные повреждения на моем загрузочном диске. Таким образом, испорченный коммит был глубоко в истории.
Меня не слишком заботит восстановление моего репозитория, за исключением того, что у меня есть несколько локальных веток, которые были слишком экспериментальными, чтобы потрудиться перенести их в удаленный репозиторий, и я хотел бы спасти работу в этих ветках.
Теоретически, поскольку это локальный репозиторий, я считаю, что Git должен иметь возможность восстанавливать / восстанавливать себя, используя origin. Почему это невозможно?
Во всяком случае, я наткнулся на эту классную стратегию по переносу ветки в другой локальный репозиторий Git . К сожалению, клонирование репозитория в ../repo_copy
с последующим использованием его в качестве локального удаленного устройства привело к следующей ошибке:
! git push --force local_remote HEAD
fatal: failed to read object e0a9dffddeeca96dbaa275636f8e8f5d4866e0ed: Invalid argument
error: failed to push some refs to '/Users/steve/Dev/repo_copy'
Поэтому я начал с пустого репозитория, а затем вставил в него ветки, и все было в порядке. Так что для любого местного филиала, который у меня был, чей git log
не заканчивался:
....
Fixing cukes
fatal: failed to read object e0a9dffddeeca96dbaa275636f8e8f5d4866e0ed: Invalid argument
Я бы просто проверил это и затем сделал git push --force local_remote HEAD
. Последнее, что я сделал, было:
! cd ~/Dev/repo_copy
! git remote add origin git@github.com:sdhull/my_repo.git # real remote
Затем я вошел в git config -e
и настроил свою основную ветку и снова заработал, ничего не потеряв!