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?
HEAD
jest po prostu odniesieniem do aktualnego zatwierdzenia (ostatniego) w bieżącej gałęzi.
W HEAD
danym momencie może istnieć tylko jeden . (wyłączając git worktree
)
Zawartość HEAD
jest przechowywana wewnątrz .git/HEAD
i zawiera 40 bajtów SHA-1 aktualnego zatwierdzenia.
detached HEAD
Jeśli nie jesteś na najnowszym zatwierdzeniu - co oznacza, że HEAD
wskazuje 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ż HEAD
nie 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 reflog
wyświetli każdą zmianę, która zaktualizowała, HEAD
a sprawdzenie żądanego wpisu reflog spowoduje HEAD
powró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 && checkout
zmodyfikuj plik HEAD
.