Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Git reflog: восстановление потерянных коммитов
git reflog - это инструмент для просмотра истории перемещений HEAD в вашем репозитории. Это спасает жизнь, когда вы случайно потеряли коммиты, ветки или сделали неправильный reset.
Что такое reflog
reflog (reference log) ведёт лог всех изменений HEAD - то есть всех переключений между коммитами, слияний, rebase'ов и reset'ов. Это локальный лог вашего компьютера, не видимый другим разработчикам.
# Просмотр истории HEAD
git reflog
# Выведет что-то вроде:
# abc1234 (HEAD -> main) HEAD@{0}: commit: Fix bug in component
# def5678 HEAD@{1}: commit: Add new feature
# ghi9012 HEAD@{2}: reset: going back to previous commit
# jkl3456 HEAD@{3}: rebase -i (finish)
# mno7890 HEAD@{4}: rebase -i (pick)
Основное применение: восстановление потерянных коммитов
Сценарий 1: Случайный reset --hard
# Вы сделали
git reset --hard HEAD~3 # Вернулись на 3 коммита назад
# Потом понял, что ошибся. Где теперь ваши коммиты?
# Они в reflog!
git reflog
# abc1234 HEAD@{0}: reset: going back to previous commit
# def5678 HEAD@{1}: commit: Your lost commit
# ghi9012 HEAD@{2}: commit: Your lost commit 2
# jkl3456 HEAD@{3}: commit: Your lost commit 3
# Восстановите потерянный коммит
git reset --hard jkl3456
# Или создайте новую ветку от него
git branch recovered jkl3456
Сценарий 2: Потеря ветки после удаления
# Вы удалили ветку
git branch -D feature-branch
# Опа, а это был важный код! Где он?
# Снова reflog на помощь
git reflog
# abc1234 HEAD@{0}: checkout: moving from feature-branch to main
# def5678 HEAD@{1}: commit: Important work on feature
# ghi9012 HEAD@{2}: commit: More important work
# Восстановите ветку
git branch feature-branch abc1234
Просмотр reflog для конкретной ветки
# reflog для текущей HEAD
git reflog
# reflog для конкретной ветки
git reflog main
git reflog feature-branch
# Подробный вывод с датами
git reflog --all
# Показать всех reflog'и
git reflog show --all
Использование с временными меткам
# Показать, где был HEAD в определённый момент времени
git reflog show --date=relative
# Вывод:
# abc1234 HEAD@{0}: commit: Latest commit
# def5678 HEAD@{1}: commit: 5 minutes ago
# ghi9012 HEAD@{2}: commit: 10 minutes ago
# Получить коммит, который был 5 минут назад
git show HEAD@{5.minutes.ago}
# Или более точно
git log -1 HEAD@{2023-04-01.12:00:00}
Практический пример из реальной работы
# Вы работали над feature-branch
git checkout feature-branch
git add .
git commit -m "Work in progress"
# Решили переключиться на main
git checkout main
# Потом сделали git reset на старый коммит
git reset --hard HEAD~5
# Вспомнили, что забыли закоммитить изменения в feature-branch
# Проверяем reflog
git reflog
# abc1234 HEAD@{0}: reset: going back
# def5678 HEAD@{1}: checkout: moving from feature-branch to main
# ghi9012 HEAD@{2}: commit: Work in progress
# Восстанавливаем ветку
git branch feature-branch ghi9012
Чистка reflog (если нужно)
# reflog хранит информацию 90 дней по умолчанию
# Удалить старые записи
git reflog expire --expire=30.days.ago --all
# Удалить все сразу (осторожно!)
git reflog expire --expire-unreachable=now --all
Почему это важно для frontend разработчика
- Безопасность при rebase: Если вы сделали git rebase -i и что-то пошло не так, reflog спасёт вас
- Восстановление веток: Случайно удалили feature-branch? reflog её найдёт
- История экспериментов: Вернитесь к любому состоянию репозитория
- Понимание истории: Увидите все свои действия с коммитами
reflog vs git log
git log - показывает историю коммитов (что было сделано)
git reflog - показывает историю изменения HEAD (куда вы прыгали)
Вывод
git reflog - это страховка от собственных ошибок. Помните, что в Git почти ничего не теряется окончательно - если что-то было в вашем HEAD когда-либо, reflog это найдёт. Это мощный инструмент для восстановления потерянных коммитов и веток.