Git Reflog
Последнее обновление
git reflog записывает каждое место, на которое указывал HEAD - каждый коммит, checkout, reset и rebase. Поскольку Git какое-то время хранит эти коммиты даже после того, как они покинули ваши ветки, reflog - это ваша страховка: он позволяет найти и восстановить работу, которую, казалось бы, уничтожили reset --hard, неудачный rebase или удалённая ветка.
Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего устанавливать не нужно.
Синтаксис
| Command | What it does |
|---|---|
git reflog | Показывает недавние позиции HEAD с хешами |
git reflog show <branch> | Показывает reflog для ветки |
git reset --hard HEAD@{1} | Возвращает HEAD на предыдущую позицию |
git branch recovered <hash> | Пересоздаёт ветку на потерянном коммите |
Восстановление после ошибки
Отмените неудачный reset, найдя коммит, который был до него.
| Step | Command | Result |
|---|---|---|
| 1 | git reflog | Найдите коммит, который был до reset |
| 2 | git 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 также пошагово охватывает отмену изменений и восстановление.