git reflog може прийти вам на допомогу.
Введіть його у свою консоль, і ви отримаєте список своєї історії git разом із SHA-1, що їх представляє.
Просто оформіть будь-який SHA-1, до якого ви хочете повернутися
Перш ніж відповісти, додамо тло, пояснивши, що це HEAD.
First of all what is HEAD?
HEADпросто посилання на поточний коміт (останній) у поточній гілці.
У HEADбудь-який момент часу може бути лише сингл . (крім git worktree)
Вміст HEADзберігається всередині .git/HEADі містить 40 байт SHA-1 поточного коміту.
detached HEAD
Якщо ви не HEADвиконуєте останній коміт - це означає, що вказує на попередній коміт в історії, його називають detached HEAD.

У командному рядку це буде виглядати так - SHA-1 замість імені гілки, оскільки HEADне вказує на кінчик поточної гілки


Кілька варіантів того, як відновити після від'єднаної ГОЛОВИ:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Це перевірить нову гілку, що вказує на бажаний коміт.
Ця команда виконає перевірку даного коміту.
На цьому етапі ви можете створити гілку і почати працювати з цього моменту.
# Checkout a given commit.
# Doing so will result in a `detached HEAD` which mean that the `HEAD`
# is not pointing to the latest so you will need to checkout branch
# in order to be able to update the code.
git checkout <commit-id>
# create a new branch forked to the given commit
git checkout -b <branch name>
Ви завжди можете використовувати reflogтакож.
git reflogвідображатиме будь-яку зміну, яка оновила, HEADа перевірка бажаного запису перезапису HEADповернеться до цього коміту .
Щоразу, коли HEAD модифікується, у файлі з'явиться новий запис reflog
git reflog
git checkout HEAD@{...}
Це поверне вас до бажаного коміту

"Перемістіть" HEAD назад до бажаного коміту.
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts if you've modified things which were
# changed since the commit you reset to.
- Примітка: ( з Git 2.7 )
ви також можете використовувати git rebase --no-autostashтакож.
"Скасувати" заданий коміт або діапазон коміту.
Команда скидання "скасує" будь-які зміни, внесені в даному коміті.
Буде здійснено новий коміт із виправленням скасування, тоді як оригінальний коміт також залишиться в історії.
# add new commit with the undo of the original one.
# the <sha-1> can be any commit(s) or commit range
git revert <sha-1>
Ця схема ілюструє, яка команда що робить.
Як бачите, reset && checkoutзмініть HEAD.
