Перейти к содержанию

Reflog: Журнал всех действий

git reflog — это мощный инструмент для восстановления потерянных коммитов, веток и других объектов. Он ведет журнал всех изменений, которые происходили с HEAD и другими ссылками в вашем локальном репозитории.

Зачем нужен Reflog?

В отличие от git log, который показывает только историю коммитов, reflog фиксирует: - Переключения между ветками. - Коммиты (включая те, что были удалены через reset --hard). - Слияния, rebase. - Отмененные операции.

Главное: Reflog позволяет восстановить коммиты, которые были "потеряны" после reset --hard или неудачного rebase.

Просмотр журнала

git reflog

Пример вывода:

a1b2c3d HEAD@{0}: checkout: moving from feature to main
e4f5g6h HEAD@{1}: commit: Добавить кнопку
i7j8k9l HEAD@{2}: checkout: moving from main to feature
m3n4o5p HEAD@{3}: reset --hard: Moving to v1.0
...

Каждая строка содержит: - Хеш коммита. - Индекс (HEAD@{0} — последнее действие, HEAD@{1} — предпоследнее и т.д.). - Описание действия.

Восстановление потерянного коммита

Сценарий: Случайный reset --hard

Вы сделали git reset --hard HEAD~2 и поняли, что удалили важные коммиты.

  1. Найдите хеш коммита, до которого нужно восстановиться: bash git reflog Найдите запись перед тем, как вы сделали reset.

  2. Выполните reset на нужный коммит: bash git reset --hard HEAD@{2} # или явно по хешу git reset --hard a1b2c3d

Все коммиты восстановятся!

Восстановление удаленной ветки

Если вы случайно удалили ветку:

git branch -D feature/login

Но коммиты никуда не делись, они есть в reflog.

  1. Найдите последний коммит удаленной ветки: bash git reflog --all | grep feature/login

  2. Создайте ветку заново на этот коммит: bash git branch feature/login <хеш-коммита>

Поиск конкретного действия

Можно фильтровать reflog по тексту:

git reflog | grep "commit: Добавить функцию"

Очистка Reflog

Reflog хранится ограниченное время (по умолчанию 90 дней для обычных записей, 30 дней для "ненужных"). Можно очистить вручную:

# Удалить старые записи
git reflog expire --expire=now --all

# Полная очистка мусора (осторожно!)
git gc --prune=now

Важно: Reflog — это локальный журнал. Он не синхронизируется с удаленным репозиторием и не доступен другим разработчикам.

Разница между Log и Reflog

Характеристика Git Log Git Reflog
Что показывает История коммитов История действий с HEAD
Видят ли другие Да (после push) Нет (только локально)
Восстанавливает удаленное ❌ Нет ✅ Да
Для чего Просмотр истории Аварийное восстановление

Типичные команды восстановления

# Вернуться к состоянию "перед последним действием"
git reset --hard HEAD@{1}

# Создать ветку на основе вчерашнего состояния
git branch backup-branch HEAD@{yesterday}

# Посмотреть, где была ветка 5 действий назад
git show HEAD@{5}

Совет: Если вы потеряли что-то важное — первым делом запустите git reflog. В 99% случаев данные можно восстановить.


Назад: Stash → | Далее: Теги →