git reflog może przyjść ci na ratunek.
Wpisz go w konsoli, a otrzymasz listę swojej historii git wraz z reprezentującym ją SHA-1.
Po prostu sprawdź dowolny SHA-1, do którego chcesz powrócić
Zanim odpowiemy, dodajmy trochę tła, wyjaśniając, co to jest HEAD.
First of all what is HEAD?
HEADjest po prostu odniesieniem do aktualnego zatwierdzenia (ostatniego) w bieżącej gałęzi.
W HEADdanym momencie może istnieć tylko jeden . (wyłączając git worktree)
Zawartość HEADjest przechowywana wewnątrz .git/HEADi zawiera 40 bajtów SHA-1 aktualnego zatwierdzenia.
detached HEAD
Jeśli nie jesteś na najnowszym zatwierdzeniu - co oznacza, że HEADwskazuje na wcześniejsze zatwierdzenie w historii, jego wywołanie detached HEAD.

W linii poleceń będzie wyglądać następująco - SHA-1 zamiast nazwy gałęzi, ponieważ HEADnie wskazuje końca bieżącej gałęzi


Kilka opcji odzyskiwania po odłączonej GŁOWIE:
git checkout <commit_id>
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits t go back
Spowoduje to pobranie nowej gałęzi wskazującej na żądane zatwierdzenie.
To polecenie spowoduje pobranie do podanego zatwierdzenia.
W tym momencie możesz utworzyć gałąź i zacząć od tego momentu.
# 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>
Zawsze możesz też użyć reflog.
git reflogwyświetli każdą zmianę, która zaktualizowała, HEADa sprawdzenie żądanego wpisu reflog spowoduje HEADpowrót do tego zatwierdzenia.
Za każdym razem, gdy HEAD zostanie zmodyfikowany, pojawi się nowy wpis w reflog
git reflog
git checkout HEAD@{...}
Spowoduje to powrót do pożądanego zobowiązania

„Przenieś” swoją HEAD z powrotem do pożądanego zatwierdzenia.
git reset --hard 0d1d7fc32
git stash
git reset --hard 0d1d7fc32
git stash pop
- Uwaga: ( od Git 2.7 )
możesz również użyć git rebase --no-autostash.
„Cofnij” podany zatwierdzenie lub zakres zatwierdzenia.
Polecenie reset "cofnie" wszelkie zmiany wprowadzone w danym zatwierdzeniu.
Nowe zatwierdzenie z cofniętą łatką zostanie zatwierdzone, podczas gdy oryginalne zatwierdzenie pozostanie również w historii.
git revert <sha-1>
Ten schemat ilustruje, które polecenie robi co.
Jak widać, reset && checkoutzmodyfikuj plik HEAD.
