git reflog
git reflog: показати журнал посилань (reference log) — історію переміщень вершин гілок та інших посилань.
Git записує в reflog кожне переміщення HEAD і твоїх гілок, тому ця команда — найшвидший спосіб побачити, куди посилання вказувало раніше, і врятувати коміт, який уже не належить жодній очевидній гілці. Цей журнал живе тільки на твоєму комп'ютері, тож він ідеально підходить для виправлення помилок у поточному клонованому репозиторії без жодного впливу на команду чи інших учасників проєкту.
Приклад
git refloga7f3c9b (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
Список упорядковано у зворотному хронологічному порядку: найсвіжіша дія — згори. Розберімо, з чого складається кожен запис:
- Хеш коміту, на який вказував HEAD після цієї дії (
a7f3c9b,b12ad6fтощо) - Необов'язкові імена посилань — гілки або теги, які зараз вказують на цей коміт (
feature/api-refactor,main,v1.4.2тощо) - Reflog-посилання — нумерований ідентифікатор (наприклад,
HEAD@0,HEAD@1), через який можна звернутися саме до цієї точки в історіїHEAD. - Опис дії — коротка позначка операції, яка перемістила
HEADна цей коміт (наприклад,commit,checkout,merge,rebase (finish)тощо)
Приклади
Показати нещодавню історію переміщень HEAD у репозиторії:
git reflogСкинути поточну гілку до стану, у якому вона була 2 переміщення тому, використовуючи reflog-посилання:
git reset --hard HEAD@{2}Скинути поточну гілку до стану, у якому гілка main була в конкретний момент часу (якщо в reflog є запис для того моменту, наприклад yesterday — учора):
git reset --hard main@{yesterday}.gitignoregit checkoutgit configgit taggit worktree