Команды Git

git reflog

git reflog: показать журнал ссылок (англ. reference log), в котором фиксируются все изменения указателей веток и других ссылок.

Git записывает каждое перемещение HEAD и веток в reflog, поэтому эта команда — самый быстрый способ узнать, куда указывала ссылка раньше, и спасти коммит, который больше не принадлежит ни одной явной ветке. Этот журнал хранится только на локальном компьютере, что делает его идеальным инструментом для отмены ошибок в текущем клонированном репозитории без какого-либо влияния на коллег по команде или других разработчиков проекта.

Пример

Запустить в терминале:
git reflog
Результат:
a7f3c9b (HEAD -> feature/api-refactor) HEAD@{0}: commit: Add error handling middleware
b12ad6f HEAD@{1}: commit: Refactor API routes and controllers
e93b4c2 HEAD@{2}: rebase -i (finish): returning to refs/heads/feature/api-refactor
e93b4c2 HEAD@{3}: rebase -i (pick): Clean up old utility functions
a57de29 HEAD@{4}: checkout: moving from main to feature/api-refactor
c1a9f3b (tag: v1.4.2, origin/main, main) HEAD@{5}: merge feature/dashboard: Merge made by the 'ort' strategy.
5b8f021 HEAD@{6}: commit: Update CHANGELOG and bump version
0cf2a11 HEAD@{7}: tag: v1.4.2: tagging version 1.4.2 release
fd61b7b HEAD@{8}: commit: Fix dashboard layout issues on Safari
a28c90c HEAD@{9}: checkout: moving from hotfix/security-patch to main
f4e35ad (hotfix/security-patch) HEAD@{10}: commit: Patch XSS vulnerability in comments
9e0cd43 HEAD@{11}: checkout: moving from main to hotfix/security-patch
a28c90c HEAD@{12}: pull origin main: Fast-forward
f01d1a2 HEAD@{13}: commit: Improve documentation for API usage
e712d8e HEAD@{14}: reset: moving to HEAD~1
f8d7a1b HEAD@{15}: commit (amend): Update README.md with new badges
b19d2aa HEAD@{16}: commit: Add README.md
eac51bb (tag: v1.4.1) HEAD@{17}: checkout: moving from feature/login to main
b9d0f4c HEAD@{18}: commit: Fix login redirect loop
fa8c121 HEAD@{19}: checkout: moving from main to feature/login
a28c90c HEAD@{20}: merge origin/main: Fast-forward
 

Список отсортирован в обратном хронологическом порядке: самое свежее действие находится сверху. Давай разберём первые несколько записей:

  1. Хеш коммита, на который стал указывать HEAD после этого действия (a7f3c9b, b12ad6f и т. д.)
  2. Опциональные имена ссылок веток или тегов, которые сейчас указывают на этот коммит (feature/api-refactor, main, v1.4.2 и т. д.)
  3. Ссылка reflog — нумерованный идентификатор (например, HEAD@0, HEAD@1), который можно использовать, чтобы сослаться на эту конкретную точку в истории HEAD.
  4. Описание действия — краткая заметка о том, какая операция переместила HEAD на этот коммит (например, commit, checkout, merge, rebase (finish) и т. д.)

Примеры

Показать недавнюю историю перемещений HEAD в репозитории:

git reflog

Сбросить текущую ветку к состоянию на 2 шага назад, используя ссылку из reflog:

git reset --hard HEAD@{2}

Сбросить текущую ветку к состоянию, в котором ветка main находилась в определённое время (при условии, что в reflog есть запись для этого момента, например вчера):

git reset --hard main@{yesterday}