November 30, 2012

Восстановление коммита в Git репозитории

Сегодня случилось страшное. Я потерял порядка 2-х дней работы сделав git rebase для перемещения бранча в Git репозитории. Тем самым "потерял" код. В кавычках потому что надежда еще есть. Мне светило переписать все заново, а это для меня в разы хуже чем писать в первый раз. Но, мне удалось найти способ восстановить потерянное, а на сэкономленное время расскажу вам как это делать, заодно и для себя будет заметка на будущее.



Для демонстрации я создал тестовый репозиторий и сделал в нем 4 коммита. Аналогичная ситуация произошла и со мной.

Теперь мы перемещаем master чтобы он ссылался на коммит с названием "3rd commit".

















"4th commit" пропадет и будет это выглядеть следующим образом.

Можно начинать паниковать... Собственно, раз вы это читаете, то скорее всего уже в панике и в поисках решения :).

Для решения опускаемся ниже, в консоль. Заходим в нужную папку и выполняем команду git reflog.




Здесь можно увидеть кое какую интересную информацию, но нам нужен SHA хеш нашего утерянного коммита. Его можно найти вот в этой строке:
4ce165e HEAD@{6}: commit: 4th commit

Вот он 4ce165e, вернее это короткая версия SHA1 хеша. Чтобы посмотреть что в этом коммите используем
git show 4ce165e

и когда убедились что это то что вы ищете
git checkout 4ce165e

Надеюсь это сэкономит кому-нибудь пару часов или дней работы. Happy coding!

Полезная литература:

1 comment: