Krótka odpowiedź:
git reset 'HEAD@{1}'
Długa odpowiedź:
Git prowadzi dziennik wszystkich aktualizacji referencji (np. Kasy, resetowania, zatwierdzania, scalania). Możesz go wyświetlić, wpisując:
git reflog
Gdzieś na tej liście jest utracone zatwierdzenie. Powiedzmy, że właśnie wpisałeś git reset HEAD~
i chcesz go cofnąć. Mój dziennik logowania wygląda następująco:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
Pierwszy wiersz mówi, że HEAD
0 pozycji temu (innymi słowy, bieżąca pozycja) to 3f6db14; uzyskano go poprzez zresetowanie do HEAD~
. Drugi wiersz mówi, że HEAD
1 pozycja temu (innymi słowy stan przed resetowaniem) to d27924e. Zostało to uzyskane poprzez sprawdzenie konkretnego zatwierdzenia (choć w tej chwili nie jest to ważne). Aby cofnąć reset, uruchom git reset HEAD@{1}
(lub git reset d27924e
).
Jeśli, z drugiej strony, uruchomiłeś kilka innych poleceń od tej aktualizacji HEAD, żądane zatwierdzenie nie będzie na górze listy i będziesz musiał przeszukać reflog
.
Ostatnia uwaga: może być łatwiej spojrzeć na reflog
konkretną gałąź, którą chcesz zresetować, powiedzmy master, niż HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Powinno to mieć mniej hałasu niż w ogóle HEAD reflog
.