Git
Reflog - Przywracanie zatwierdzeń nie pokazanych w git log
Szukaj…
Uwagi
Reflog Gita rejestruje pozycję HEAD (ref dla aktualnego stanu repozytorium) przy każdej zmianie. Zasadniczo każda operacja, która może być destrukcyjna, wymaga przesunięcia wskaźnika HEAD (ponieważ jeśli coś zostanie zmienione, w tym w przeszłości, zmieni się skrót mieszania końcówki), więc zawsze można wrócić do starszego stanu, przed niebezpieczną operacją , znajdując odpowiednią linię w dzienniku logowania.
Obiekty, do których nie odwołuje się żaden ref, są zwykle usuwane w ciągu ~ 30 dni, więc reflog może nie zawsze być w stanie pomóc.
Odzyskiwanie po złej bazie
Załóżmy, że uruchomiłeś interaktywną bazę:
git rebase --interactive HEAD~20
i przez pomyłkę zgniotłeś lub upuściłeś kilka zobowiązań, których nie chciałeś stracić, ale ukończyłeś rebase. Aby odzyskać, zrób git reflog
, a możesz zobaczyć takie dane wyjściowe:
aaaaaaa HEAD@{0} rebase -i (finish): returning to refs/head/master
bbbbbbb HEAD@{1} rebase -i (squash): Fix parse error
...
ccccccc HEAD@{n} rebase -i (start): checkout HEAD~20
ddddddd HEAD@{n+1} ...
...
W tym przypadku ostatnie zatwierdzenie, ddddddd
(lub HEAD@{n+1}
) jest wierzchołkiem gałęzi przedrebase . Tak więc, aby odzyskać to zatwierdzenie (i wszystkie zobowiązania nadrzędne, w tym przypadkowo zgniecione lub upuszczone):
$ git checkout HEAD@{n+1}
Następnie możesz utworzyć nową gałąź przy tym zatwierdzeniu za pomocą git checkout -b [branch]
. Aby uzyskać więcej informacji, zobacz Rozgałęzianie .