Menu
Coddy logo textTech

Git Reflog

Последнее обновление

git reflog записывает каждое место, на которое указывал HEAD - каждый коммит, checkout, reset и rebase. Поскольку Git какое-то время хранит эти коммиты даже после того, как они покинули ваши ветки, reflog - это ваша страховка: он позволяет найти и восстановить работу, которую, казалось бы, уничтожили reset --hard, неудачный rebase или удалённая ветка.

Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего устанавливать не нужно.

git reflog записывает каждую позицию HEAD, поэтому коммит, потерянный после reset или rebase, можно найти и восстановить.

Синтаксис

CommandWhat it does
git reflogПоказывает недавние позиции HEAD с хешами
git reflog show <branch>Показывает reflog для ветки
git reset --hard HEAD@{1}Возвращает HEAD на предыдущую позицию
git branch recovered <hash>Пересоздаёт ветку на потерянном коммите

Восстановление после ошибки

Отмените неудачный reset, найдя коммит, который был до него.

StepCommandResult
1git reflogНайдите коммит, который был до reset
2git reset --hard HEAD@{1}Верните ветку к нему

Часто задаваемые вопросы о git reflog

Что такое git reflog?
Это журнал всех мест, на которые указывал HEAD (и вершина каждой ветки) в вашем локальном репозитории - после коммитов, checkout'ов, reset'ов, merge'ей и rebase'ов. В отличие от git log, который следует за предками коммитов, reflog - это хронологическая запись ваших действий, и именно это делает его полезным для восстановления.
Как восстановить коммит после git reset --hard?
Выполните git reflog, чтобы найти запись коммита, на котором вы были до reset (что-то вроде HEAD@{1}), а затем git reset --hard <that-hash> (или HEAD@{1}), чтобы вернуться к нему. Коммит на самом деле не был удалён - просто на него перестала указывать какая-либо ветка, а reflog по-прежнему знает его хеш.
Как восстановить удалённую ветку?
Найдите последний коммит ветки в git reflog, а затем пересоздайте ветку на нём: git branch <name> <hash>. Пока удаление было недавним (в пределах срока хранения reflog в Git, обычно недели), коммиты всё ещё доступны таким способом.
Работает ли git reflog между клонами?
Нет - reflog локален для вашего репозитория и не отправляется через push и не клонируется. Он записывает только действия на вашей машине. Именно поэтому он может спасти локальные ошибки, но не может восстановить то, что когда-либо существовало только в другом клоне.
Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить git reflog в настоящей оболочке в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс по Git от Coddy также пошагово охватывает отмену изменений и восстановление.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ