Восстановление битого репозитория git - PullRequest
10 голосов
/ 09 октября 2009

Мой рабочий репозиторий git поврежден, он теряет все файлы в нем, т.е.

$ git log
fatal: bad default revision 'HEAD'  
$ git status  
... told me that all the files are new

Однако каталог .git содержит мои объекты.

$ du -sh .git
34M    .git
$ git count-objects
4151 objects, 32692 kilobytes
$ git --version
git version 1.6.0.4

Последнее, что я помню до того, как все пошло не так, было создание (clone --mirror) резервного хранилища на сервере, смонтированном по NFS. Однако клонированное резервное хранилище сломано таким же образом.

Как я могу восстановить свой репозиторий?

Ответы [ 5 ]

8 голосов
/ 10 октября 2009

Должно быть, было что-то кроме клона, но я знаю, как трудно запомнить эти вещи.

Первое, что вы хотите сделать, это заглянуть в .git / refs и посмотреть, есть ли там что-нибудь правильное (я не слишком оптимистичен, так как вы говорите, что веток, похоже, нет, но это стоит выстрел). Если какие-либо действительные ссылки существуют, вы можете получить некоторую информацию от git-reflog.

Далее я бы начал смотреть на git-fsck. Его основное назначение - проверка связности и достоверности объектов в базе данных. В зависимости от того, что именно произошло с вашим репо, вам может понадобиться --unreachable или --lost-found. Надеемся, что объекты не повреждены, поэтому все, что вам нужно сделать, - это найти несколько хэшей с фиксированными коммитами для проверки и воссоздания веток в.

1 голос
/ 30 августа 2013

Эта проблема возникла у меня сразу после сбоя приложения GitHub (ПК). Моя ветвь исчезла при использовании git branch, и он продолжал предлагать мне выполнить мой первоначальный коммит. Я решил это, найдя мою ветку в .git/refs/heads/ и переименовав ее с mybranch.lock на mybranch (снять блокировку).

1 голос
/ 26 февраля 2010

Попробуйте проверить, принадлежит ли каждый из ваших файлов в .git / текущему пользователю.

У меня была такая же проблема, когда я понял, что сделал несколько коммитов с пользователем root, и это создало объекты (в .git / objects), которые принадлежат root, вызывая ошибки при запуске git от имени обычного пользователя.

Эта команда решила проблему:

sudo chown jb:jb .git/ -R *
1 голос
/ 10 октября 2009

Вы можете проверить вручную, но это потребует некоторых знаний о формате хранилища.

Не глядя на хранилище, трудно сказать, что происходит, но, возможно, какой-то файл был поврежден.

Запустите git fsck, и он сообщит, действителен ли ваш репозиторий.

Опубликуйте результат запуска git fsck, и это должно помочь нам помочь вам.

0 голосов
/ 12 сентября 2014

У меня была эта проблема после того, как разработчик сделал $ git init внутри голого мастера централизованного репо.

Если вы работаете с хранилищем без рабочего каталога, проверьте наличие папки .git; удаление этого должно исправить проблему.

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