Что делает команда `git reflog`?

Команда git reflog отображает историю изменений указателя HEAD и веток в локальном репозитории. Это журнал операций, позволяющий восстановить потерянные коммиты или отменить неудачные действия (например, сброс ветки). В отличие от git log, git reflog показывает *локальную* историю, не синхронизированную с удаленным репозиторием.

Команда git reflog используется для просмотра истории изменений указателей (refs) в вашем локальном репозитории Git. Это мощный инструмент для восстановления потерянных коммитов или для понимания того, как менялась ваша ветка разработки.

Основные функции и особенности:

  • Запись действий: git reflog ведет запись почти всех действий, которые изменяют указатели, таких как коммиты, слияния, переключения веток, сбросы (reset) и другие операции.
  • Локальная история: Важно понимать, что reflog хранится локально в вашем репозитории. Он не синхронизируется с удаленными репозиториями. Каждый разработчик имеет свой собственный reflog.
  • Восстановление коммитов: Если вы случайно удалили ветку или выполнили git reset --hard, git reflog предоставляет возможность найти SHA-1 хэш нужного коммита и восстановить его, создав новую ветку или выполнив git cherry-pick.
  • Синтаксис: git reflog без дополнительных параметров показывает reflog для текущей ветки. Можно указать конкретную ветку, например git reflog show master.
  • Вывод: Вывод reflog показывает список действий, их SHA-1 хэши и краткое описание события (например, "reset: moving to HEAD"). Каждая запись имеет свой порядковый номер, который можно использовать для отката к определенному состоянию.
  • Срок хранения: Git автоматически удаляет старые записи reflog через определенный период времени (обычно 90 дней для записей, относящихся к HEAD, и 30 дней для записей, не относящихся к HEAD). Это можно настроить через конфигурационные параметры.

Пример использования:

Предположим, вы случайно откатили состояние вашей ветки feature/new-feature с помощью git reset --hard. Чтобы восстановить потерянные изменения, вы можете сделать следующее:

  1. Выполните git reflog show feature/new-feature.
  2. Найдите в выводе reflog запись, соответствующую последнему коммиту перед откатом. Запомните его SHA-1 хэш (или его сокращенную версию, например HEAD@{5}).
  3. Восстановите состояние, создав новую ветку от этого коммита: git checkout -b recovery-branch <SHA-1 хэш> или git checkout -b recovery-branch feature/new-feature@{5}.

В заключение, git reflog — ценный инструмент для восстановления потерянных изменений и для понимания истории вашего локального репозитория. Однако, не забывайте, что он является локальным и не синхронизируется с удаленными репозиториями.

0