Команда git reflog показывает локальную историю перемещений указателей, прежде всего HEAD и веток, включая состояния, которых нет в обычном логе. Она нужна, чтобы находить и восстанавливать «потерянные» коммиты после операций вроде reset, rebase и checkout. По записям reflog можно выбрать нужный прошлый момент и вернуть репозиторий в это состояние.
git reflog — это локальный журнал изменений ссылок (reference log), в котором Git фиксирует, куда и когда перемещался HEAD и ветки. В отличие от git log, он показывает не только «официальную» историю коммитов, но и все промежуточные шаги после команд вроде commit, reset, rebase, checkout, merge, pull и т.п.
Практический смысл в том, что даже если вы «стерли» коммиты жёстким git reset --hard или сломали историю неудачным rebase, сами объекты коммитов ещё какое‑то время остаются в хранилище Git. Через git reflog можно найти те состояния, на которые когда‑то указывал HEAD, и вернуть репозиторий к нужному моменту.
Типичные задачи, которые решают с помощью git reflog:
HEAD и текущая ветка — какие были коммиты и какие команды их сдвигали.reset, неудачного rebase или удаления ветки.Вывод git reflog — это список записей вида HEAD@{N}, где N — шаг назад во времени (0 — текущее состояние). Рядом показывается хеш коммита и краткое описание операции (например, commit, reset: moving to ..., rebase finished), по которым видно, какие команды меняли историю и к какому коммиту они привели.
Пример: посмотрим локальную историю перемещений HEAD и увидим, какие действия меняли текущую ветку.
Чтобы восстановить состояние до неудачной команды, можно «перепрыгнуть» на нужную точку из reflog с помощью git reset или создать от неё новую ветку. Это позволяет безопасно откатить историю даже после, казалось бы, необратимых операций.
Важно учитывать ограничения: журнал reflog существует только локально (у каждого разработчика свой) и хранится ограниченное время — старые записи и неиспользуемые объекты со временем удаляются сборщиком мусора git gc. Поэтому git reflog отлично подходит для восстановления недавних изменений, но не гарантирует бесконечного хранения всей истории.
Отметьте свой прогресс