Git reflog: Восстановление истории коммитов

Команда Git reflog — мощный инструмент для просмотра полной истории всех локальных операций, выполненных в репозитории. Reflog позволяет отменить действия и вернуться к предыдущим состояниям проекта.

Что такое Git reflog?

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

Просмотр истории

Для просмотра лога всех операций, выполненных с помощью указателя HEAD, введите команду git reflog. Вы увидите список записей, содержащих:

  • SHA-1 хэш: Уникальный идентификатор коммита.
  • Ссылки: Текущая ссылка HEAD и другие ветки, указывающие на коммиты.
  • Сокращение: Например, HEAD@{0}, HEAD@{1} и т.д. Это счётчик, обозначающий относительное положение операции в истории (0 — последняя операция, 1 — предпоследняя и так далее).

Для просмотра истории операций для конкретной ветки, например, temp, используйте команду git reflog show temp.

Возврат к предыдущим состояниям

Reflog позволяет вернуться к любому состоянию репозитория, зафиксированному в логе. Вы можете использовать SHA-1 хэш или относительный указатель (например, HEAD@{5}) для переключения на нужное состояние.

Пример:

  1. Скопируйте SHA-1 хэш нужного коммита из вывода git reflog.
  2. Используйте команду git checkout <SHA-1 хэш> для переключения на это состояние.

Также можно использовать относительные указатели:

  • git checkout HEAD@{6} — переключение на состояние, которое было 6 операций назад.

Reflog и git reset

Даже после выполнения git reset —hard, история сохраняется в reflog. Это позволяет отменить git reset и вернуть репозиторий в состояние до сброса.

Пример:

  1. Выполните git reset —hard <SHA-1 хэш> для сброса репозитория.
  2. Проверьте reflog, чтобы найти SHA-1 хэш состояния до сброса.
  3. Используйте git reset —hard <SHA-1 хэш> (из reflog) для отмены сброса.

Ограничения

  • Локальность: Reflog содержит только локальную историю.
  • Срок хранения: По умолчанию записи в reflog хранятся 90 дней. После этого они удаляются.

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

Что будем искать? Например,программа