git reflog
Тема дорожной карты · Изучи Git
git reflog — это локальный журнал всех перемещений HEAD и тиков веток: коммиты, reset, rebase, checkout и даже amend. Когда работа «потеряна» из-за неудачного reset --hard или сломанного rebase, reflog подскажет предыдущий SHA — и можно git reset --hard HEAD@{2} или git branch rescue HEAD@{n}. Это особо важно для разработчиков, которые часто работают с ветками и нуждаются в возможности восстановления состояния репозитория до определенного момента.
Как это работает
git reflog отображает историю всех перемещений HEAD с отметками времени. Это позволяет отслеживать все изменения, которые были сделаны в репозитории, включая коммиты, reset, rebase, checkout и amend. Например, команда git reset --hard HEAD@{1} отменяет последнее действие, которое могло быть любым из перечисленных выше. Также git reflog помогает восстановить недавно удаленные коммиты, которые еще не были удалены окончательно.
По умолчанию записи в reflog живут 90 дней для достижимых ссылок и 30 дней для недостижимых ссылок (gc.reflogExpire). Это означает, что если вы случайно удалили коммит, вы все еще можете его восстановить, если он не был удален окончательно.
Когда применять
git reflog — это ваша подстраховка в случае потери работы или неудачного изменения истории. Например, если вы случайно выполнили reset --hard и потеряли коммиты, вы можете восстановить их с помощью reflog. Это особенно полезно для разработчиков, которые часто работают с ветками и нуждаются в возможности восстановления состояния репозитория до определенного момента.
Также git reflog полезен для восстановления коммитов, которые были удалены из основной ветки, но все еще доступны в истории. Например, если вы случайно выполнили reset --hard origin/main, вы можете восстановить удаленные коммиты с помощью git reflog.
Типичные ошибки
Одной из самых распространенных ошибок при использовании git reflog является неумение восстановить коммиты, которые были удалены из основной ветки. Например, если вы случайно выполнили reset --hard origin/main, вы можете восстановить удаленные коммиты с помощью git reflog.
Еще одна распространенная ошибка — это выполнение команды git gc --prune=now --aggressive, которая удаляет все записи из reflog, включая orphan коммиты. Это может привести к потере возможности восстановления удаленных коммитов.
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…