Git - powrót do wcześniejszej wersji

Na wstępie przepraszam, że piszę w tym dziale, ale na forum coraz bardziej zaczyna brakować działu niezbyt związanego bezpośrednio z railsami imho :wink:
Pytałem już w w kilku miejscach,jednak nikt mi nie jest w stanie pomóc, a nie wierzę, że mam problem nie do rozwiązania, mianowicie:

Kiedyś przełączyłem się z mastera na nową gałąź (nie pamiętam dokładnie jak, w każdym razie była to gałąź bez imienia)

[code]git branch

  • (no branch)
    master[/code]
    i w tej gałęzi (braku gałęzi?) dokonałem wielu zmian, dodałem wiele plików - ogólnie sporo pracy.
    Następnie się pomyliłem, i wykonałem

git checkout master Previous HEAD position was 5a762e7... porządek cd. Checking out files: 100% (90/90), done. Switched to branch "master"
przez co powróciłem do wersji z master, i wszystkie zmiany poszły się kochać…
pytanie, jak teraz mogę powrócić do danych które miałem przed tym checkoutem?
będę niezwykle wdzięczny za wszelką pomoc.

“no branch” najczęściej występuje kiedy przełączasz się na gałąź zdalną (np. git checkout origin/master), albo podczas jakichś dziwnych perturbacji przy merge’ach.

Nigdy nie miałem takich przygód, ale w gicie (chyba :wink: nic nie ginie, więc prawdopodobnie będziesz mógł odzyskać commity. Przy “no branch” commity są dalej wrzucane do repozytorium, ale ani HEAD, ani żadna gałąź nie są ustawione na ostatni z nich.

Żeby je odzyskać musisz tylko znać ich nazwy. Spróbuj zobaczyć co pokazuje git log:

# --all pokazuje commity ze wszystkich gałęzi git log --all
Jeżeli będą tam owe commity, to skopiuj sobie nazwę ostatniego i stwórz na jego podstawie nową gałąź:

# oczywiście recovery, to może być dowolna nazwa nowej gałęzi git checkout -b recovery nazwa_commita
Jeżeli się uda, to powinieneś mieć gałąź, która jest ustawiona na ten commit. Wtedy wystarczy zrobić:

git checkout master git merge recovery
Daj znać jak poszło, jeżeli będzie sypać jakimiś błędami, to może uda się coś lepszego wymyślić.

to chyba jednak będę miał problem - mam otwarty terminal z całą historią mojego faila (do teraz nie wiem, co,po co robiłem, i co chciałem uzyskać - ale mniejsza z tym)
krótka fail-historia
listy plików poucinałem, bo to nie jest zbyt pasjonująca lektura, widać natomiast o co chodzi - zwłaszcza w lini 27, gdzie była pokaźna lista plików z “untracked changes”.
Zaczynam się powoli godzić z tym, że czeka mnie ponowne pisanie tego samego, jednak mam nadal iskierkę nadziei, że uda się to odzyskać.

Z tego co widzę, są tam tylko untracked files - jeżeli ich nie dodałeś do indeksu, to po przełączeniu na inną gałąź powinny tam zostać - git ich nie nadpisuje.

a co widzisz po zrobieniu:

git show b8e84ae

?

UPDATE:

i spróbuj jeszcze:

git cherry-pick b8e84ae

zacznij od git reflog
powinieneś dostać wszystkie możliwe commity, nawet te do których już nie ma bezpośredniego odnośnika, możesz je potem spokojnie checkoutować. jeśli jednak nie zrobiłeś nigdy commita to jesteś w …

krzyzak, wszystko jest do odzyskania. Problemem w Twoim przypadku jest to, że nie masz nazwanej referencji (brancha) do tego commita. Posłuchaj Świstaka i zacznij od refloga, który wylistuje Ci sha1 ostatnich referencji HEADa. Możesz podglądać poprzez HEAD@{0}, HEAD@{1} itd aż znajdziesz Twój zagubiony commit). Potem wystarczy zrobić cherry-picka tego commita do mastera (git checkout master; git cherry-pick ).

jesteście wielcy, zdobyłem już sha mojego zaginionego commita, jednak gdy chcę wykonać cherry-pick otrzymuję:

fatal: Dirty index: cannot cherry-pick

jakieś podpowiedzi?:slight_smile:

Twój katalog roboczy (w szczególności index) nie jest czysty. Zrób stasha albo commita zmian, które zrobiłeś. Stash polega na chwilowym wycofaniu zmian, które potem możesz z powrotem nanieść.

git stash git cherry-pick sha1 git stash pop

a cherry-pick nie wyciagnie tylko pojedyńczego commita?

Tak, ale “krótka fail-historia” mówi, że zrobiony był tylko 1 commit ;-).

drogus mnie zmylił :slight_smile:

dzięki, koledzy, jesteście wielcy :wink:
radarek, drogus, Świstak - zaprawdę powiadam Wam, piwo się Wam należy za to dokonanie - jakbyśmy tylko mieli okazję spotkać się na żywo, nie omieszkam dotrzymać obietnicy;)

Zapraszamy do Krakowa na KRUG 15tego :slight_smile: przynajmniej Mnie i Radka pewnie tam złapiesz :smiley: Dobrze że udało się odzyskać!

chętnie, ale nie mam technicznej możliwości - gdyby to było w piątek/weekend, to już prędzej :wink:

tia, pisanie drugi raz tego samego jest chyba jednym z większych demotywatorów