GIT говорит, что у меня нет коммитов в репо - как восстановить? - PullRequest
1 голос
/ 03 января 2012

Использование Win7, 64-bit.

Я использую графический интерфейс GitExtensions, который работал нормально в течение 3 месяцев. Сегодня я сделал коммит, сразу же подтолкнул к своему репо сервера и выключился. Когда я включился позже в тот же день и попытался сделать еще один (локальный) коммит, GitExtensions сказал мне, что я НИКОГДА не фиксировал это репо, и показал 119 файлов с изменениями.

Очевидно, что что-то зажарилось, поэтому моей первой мыслью было вытащить из моего репо сервера. Угадай, что? Репозиторий сервера также показывает, что я НИКОГДА не совершал его.

Итак, моя следующая мысль была о том, что GitExtensions лжет мне. Поэтому я перешел в «Черепаховый ГИТ» и сделал «Просмотр журнала». Угадай, что? GitExtensions не врет. Черепаха GIT также показывает, что я НИКОГДА не предан своему репо.

Когда я физически просматриваю репо, я вижу все объектные файлы с разумно выглядящими временными метками, охватывающими 3 месяца, в течение которых я работал над этим проектом.

Как я могу получить GIT для восстановления и осознать, что у меня 3 месяца коммитов ВСЕ ЕЩЕ? Единственные статьи, которые я видел, посвящены тому, как восстановить отдельные потерянные коммиты, которые должны использовать более ранний коммит в качестве отправной точки. Очевидно, это не поможет мне, так как я не вижу никаких коммитов.

Спасибо за вашу помощь.

Ответы [ 3 ]

1 голос
/ 03 января 2012

Во-первых, сделайте резервную копию вашего хранилища, чтобы любые неудачные попытки исправления не повредили его.

git fsck может помочь найти и исправить ошибки в хранилище.

git reflog может помочь вам определить осиротевшие коммиты и восстановить историю.

Этот ответ на ошибку "bad default revision" может помочь.

Если fsck ничего не делает для вас, моей первой мыслью было бы попытаться сбросить HEAD удаленного репозитория обратно на один коммит, а затем попробовать выполнить повторное клонирование.

1 голос
/ 03 января 2012

Проверьте, что вы получаете за "git log master" или любую другую ветку. Если это работает, вы можете использовать «git bundle» для явного экспорта коммитов и всех связанных объектов. Промойте и повторите для других веток в .git / refs.

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

0 голосов
/ 03 января 2012

Папка .git все еще там? Если это то, где git хранит всю свою информацию. Если нет, то возвращать нечего. Если нет, то ваш местный мерзавец исчез. Если вы .git все еще там, попробуйте запустить git log и посмотрите, что он показывает.

Если ваша папка .git исчезла, тогда вы сможете сделать «новый» клон с вашего сервера, чтобы получить все.

...