git - есть фиксация журнала, но отсутствует файл .sln, поэтому не удается открыть проект - как восстановить - PullRequest
2 голосов
/ 30 марта 2019

Есть ли способ восстановить файлы моего проекта с помощью git.

Вот сценарий .... Я работал на ветке в течение нескольких дней. Эта ветвь никогда не передавалась в удаленное хранилище , поэтому она полностью локальна.

В итоге я потерял свой файл решения .sln, поэтому больше не могу открыть проект, но в каталоге проекта у меня все еще есть каталог .git.

Если я запускаю git log, я вижу, что в нем перечислены коммиты задом наперед, поэтому кажется, что журналы существуют.

есть ли способ как-то найти файлы в этих журналах или восстановить мой проект на основе коммитов в журнале? Или есть другой способ?

UPDATE

Благодаря @RomainValeri, git checkout <commit-hash> работает, но устанавливает HEAD в отключенное состояние. Хотя это может и не иметь большого значения, позже я обнаружил, что git reset --hard HEAD~1 работает лучше, поскольку мне не нужно сохранять изменения в последнем коммите, поэтому использование --hard отбрасывает их. Если вам нужно сохранить эти изменения, вместо этого используйте --soft, чтобы сбросить HEAD для вашего коммита до последнего коммита и добавить изменения в последнем коммите в промежуточную область.

git reset --hard HEAD~1
git reset --hard HEAD~2
git reset --hard HEAD~3
...

Вышеуказанные команды сбрасывают указатель HEAD 1, 2, 3, ... фиксирует перед последним коммитом и отменяет любые изменения после. Используйте --soft вместо --hard, если вы не хотите отменять эти изменения, в этом случае эти изменения будут подготовлены для вас.

1 Ответ

1 голос
/ 30 марта 2019

Да, это сам принцип git: возможность восстанавливать кодовую базу на разных этапах его разработки.

По сути, любой коммит - это моментальный снимок.

Так что успокойтесь:Если вы видите длинный список журналов, вы не просто читаете статический журнал.Этот вывод создается при исполнении из коммитов, доступных в вашем git-репо.И коммиты содержат все.Каждый коммит является полной копией кодовой базы.

Если вы выполните

git checkout <commitHash>

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

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

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