Git - как восстановить из пропавшего blob
Я запускаю git 1.6.4.2. Уборка мусора не позволяет сказать "ошибка: не удалось найти <SHA1>
".
Мне удалось определить, что недостающий объект - это blob, и я не могу вернуть файл blob. Кажется, что два скрипта, которые запускают "git add" и "git commit", запускались одновременно и им мешали друг другу, так что один передавал более новую версию файла, чем другую, и более старые версия blob исчезла.
Итак, что я пытаюсь сделать сейчас, это откат моего репозитория, чтобы вынуть фиксацию, которая относится к дереву, которое относится к отсутствующему блоблю.
Я знаю, какая ветвь была включена, поэтому я запустил "git reset" для перемотки назад к родительскому члену команды duff. И я знаю, что ветка была объединена где-то в другом месте, поэтому я перематываю эту ветку. Насколько я знаю, на duff commit/tree/blob ни на что не ссылаются. Но если я запустил git prune --expire =, а затем git gc, то я все равно получаю сообщение об ошибке с отсутствующим объектом.
Итак, мой вопрос заключается в следующем: как я могу запросить базу данных git, чтобы найти каждый объект дерева, содержащий идентификатор duff blob? И как мне узнать, что вызывает git чернослив, чтобы сохранить его?
Tricky!!
Спасибо
Кевин
Ответы
Ответ 1
После немного более рыхления выясняется, что на мой вопрос ответили: Как удалить blob из git repo - git prune
не было обрезкой материал, который я ранил, потому что reflog все еще ссылался на него. Запуск
git reflog expire --expire=now --all
исправлено это. Кроме того, ссылочная позиция предоставляет механизм для запуска git lstree
для каждой фиксации для поиска ссылочного блоба.
Ответ 2
У меня была та же проблема (отсутствует blob) и решение с
git reflog expire --expire=now --all
не сделал трюка.
Я нашел свое решение здесь: https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F
Эта простая строка
git hash-object -w <file>
Исправлено недостающее blob.
Надеюсь, что это поможет.