Восстановление репозитория git из каталога объектов - PullRequest
1 голос
/ 24 сентября 2011

Я не знаю, как это произошло, но у меня была потеря данных, и у меня остался только каталог .git, содержащий только каталог objects.

Я следовал инструкциям Восстановление репозитория Git только из объектов :

  1. Создал новый каталог и запустил git init
  2. Скопировал каталог objects, который у меня был, в новый каталог .git/objects
  3. Ран git fsck команда.

Вывод вышеприведенных шагов выдает следующее сообщение:

notice: HEAD points to an unborn branch (master)
notice: No default references
dangling commit 0b2c7d52b6a7e6d4e2858e9ebf207c315407c87c
dangling commit 8dceafea1634c923069f6d4b925839c28d92c4e5
dangling commit dd7bdd04c557a018c15fd0948075121f181decd1

Когда я пытаюсь запустить git log на этом этапе, я получаю fatal: bad default revision 'HEAD'.

Что мне делать, чтобы восстановить мои данные ???


EDIT:

предложение Клаустофера:

  1. Я добавил файл в /refs/heads с именем master, содержащий один из висячих коммитов.
  2. Сообщение, которое я получил в ответ, было fatal: unable to read tree 3c864da48b16ad0dc5f8ae585380270a708a1e56
  3. Я проверил, и нет каталога 3c под "объектами" ...

1 Ответ

1 голос
/ 24 сентября 2011

Ну, у вас есть объекты, но git понятия не имеет, какой коммит он должен интерпретировать как мастер.В выводе git fsck есть три предложения.Вы можете попробовать следующее:

  • создать каталог .git/refs/heads и создать файл с именем master
  • Поместить в этот файл хеш SHA1 одного из коммитов
  • Выполнить git checkout master

Если это не тот коммит, который вы искали, вставьте другой хэш sha1 в master -файл

-

Редактировать : Если это не настоящие коммиты, как вы описали в комментарии, то, возможно, вам следует пройтись по вашим объектам.С помощью git show 2452845a7b526db3dfbf88c1c2ca05967ef9653a вы можете увидеть содержимое файла.Если это коммит, он начинается со слова commit, а также содержит дату, сообщение о коммите и т. Д.Возможно, вы могли бы написать небольшой сценарий оболочки, чтобы пройти через все объекты.Когда вы нашли свой коммит, поместите его sha1 в файл refs /heads / master и сделайте то, что я описал выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...