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)

Загрузка вопросов…