← Назад к вопросам

Зачем нужна команда git reflog?

2.3 Middle🔥 201 комментариев
#Инструменты и DevOps

Комментарии (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 разработчика

  1. Безопасность при rebase: Если вы сделали git rebase -i и что-то пошло не так, reflog спасёт вас
  2. Восстановление веток: Случайно удалили feature-branch? reflog её найдёт
  3. История экспериментов: Вернитесь к любому состоянию репозитория
  4. Понимание истории: Увидите все свои действия с коммитами

reflog vs git log

git log       - показывает историю коммитов (что было сделано)
git reflog    - показывает историю изменения HEAD (куда вы прыгали)

Вывод

git reflog - это страховка от собственных ошибок. Помните, что в Git почти ничего не теряется окончательно - если что-то было в вашем HEAD когда-либо, reflog это найдёт. Это мощный инструмент для восстановления потерянных коммитов и веток.