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 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow