Восстановление потерянных коммитов — git reflog

Представим, что вы работаете над своим проектом и набираете текст

git reset --hard HEAD~N
Войти в полноэкранный режим Выйти из полноэкранного режима

Затем вы нажали Enter ️ по ошибке, возможно…

В основном это означает, что вы потеряли последние N коммитов, и сейчас у вас чистое рабочее дерево.

Не бойтесь, для этой ситуации есть решение.

Представляем git reflog

Рефлог строго локален и не является частью репозитория. Он также не включается в pushes, fetches или clones. Git использует инструмент git reflog для отслеживания изменений, внесенных в советы ветвей. Он позволяет вернуться к любому коммиту, даже если на него не ссылается ни одно ответвление или метка.

Подробнее о рефлогах вы можете прочитать в Gitprotect.

Итак, как восстановить потерянный коммит?

Чтобы восстановить потерянный коммит, используйте
git reflog, чтобы увидеть свои локальные изменения:
Здесь, в основном, вы можете увидеть локальные действия, зарегистрированные Git’ом.
Затем вы можете выбрать SHA коммита, к которому вы хотите вернуться, и затем выполнить команду

git reset --hard e4dd6f6
Войти в полноэкранный режим Выйти из полноэкранного режима

или

git cherry-pick e4dd6f6
Войти в полноэкранный режим Выйти из полноэкранного режима

Не забывайте, что вы можете использовать grep с git reflog для поиска по сообщению коммита или имени ветки… 😉.

Это круто, но есть ли у git reflog какие-то недостатки?

Рефлоги или ссылочные журналы хранятся только на вашей машине, это означает, что вы не можете нажать или вытащить их из удаленного хранилища.

И, что более важно, они становятся просроченными через некоторое время git-gc (git garbage collector).

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

Подробнее об этом вы можете прочитать здесь

Демонстрация

Оцените статью
Procodings.ru
Добавить комментарий