Команда 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}) для переключения на нужное состояние.
Пример:
- Скопируйте SHA-1 хэш нужного коммита из вывода git reflog.
- Используйте команду git checkout <SHA-1 хэш> для переключения на это состояние.
Также можно использовать относительные указатели:
- git checkout HEAD@{6} — переключение на состояние, которое было 6 операций назад.
Reflog и git reset
Даже после выполнения git reset —hard, история сохраняется в reflog. Это позволяет отменить git reset и вернуть репозиторий в состояние до сброса.
Пример:
- Выполните git reset —hard <SHA-1 хэш> для сброса репозитория.
- Проверьте reflog, чтобы найти SHA-1 хэш состояния до сброса.
- Используйте git reset —hard <SHA-1 хэш> (из reflog) для отмены сброса.
Ограничения
- Локальность: Reflog содержит только локальную историю.
- Срок хранения: По умолчанию записи в reflog хранятся 90 дней. После этого они удаляются.
Git reflog — незаменимый инструмент для отката изменений и восстановления предыдущих состояний репозитория. Он особенно полезен после потенциально опасных операций, таких как git reset. Однако помните о локальности и ограниченном сроке хранения данных в reflog.