Niedawno przeprowadziłem się z SVN do Git i jestem nieco zdezorientowany. Musiałem uruchomić poprzednią wersję skryptu przez debugger, więc zrobiłem git checkout <previous version hash>
i zrobiłem, co musiałem zrobić.
Teraz chcę wrócić do najnowszej wersji, ale nie znam jej skrótu. Kiedy piszę git log
, nie widzę tego.
W jaki sposób mogę to zrobić? Czy jest też łatwiejszy sposób na zmianę wersji niż wpisywanie skrótów - coś w rodzaju „cofnij dwie wersje” lub „przejdź do najnowszego chronologicznie”?
git
git-checkout
Nathan Long
źródło
źródło
git checkout master
jest dokładnie tak, jak wróciłem z oddziału. Czy to oznacza, że kiedy sprawdzam poprzednią wersję, zasadniczo tworzę gałąź?git log
że wyświetli się w stosunku do tego punktu? A kiedy kasuję wzorzec, przenoszę wskaźnik do najnowszej wersji gałęzi głównej?git checkout
to sposób na przesuwanie głowicy. Kiedy odłączyłeś HEAD, sprawiłeś, że wskazywał prosto na podany zatwierdzenie; przy ponownym sprawdzeniu wzorca wskazuje on na wzorzec. (I wiele wielu poleceń, takich jakgit log
faktycznie, przyjmuje zakres zmian, który domyślnie jest ustawiony na HEAD.)Kiedy kasujesz do konkretnego zatwierdzenia, git tworzy oddzielną gałąź. Więc jeśli zadzwonisz:
Zobaczysz coś takiego:
Aby wrócić do głównego oddziału głównego, wystarczy ponownie złożyć zamówienie w głównym oddziale:
To polecenie automatycznie usunie odłączoną gałąź.
Jeśli
git checkout
nie działa, prawdopodobnie zmodyfikowałeś pliki powodujące konflikt między oddziałami. Aby zapobiec utracie kodu, git wymaga radzenia sobie z tymi plikami. Masz trzy opcje:Ukryj swoje modyfikacje (możesz je później usunąć):
Odrzuć zmiany resetujące odłączoną gałąź:
Utwórz nowy oddział z poprzednimi modyfikacjami i zatwierdź je:
Następnie możesz wrócić do głównej gałęzi (najnowsza wersja):
źródło
To załatwiło sprawę (nadal byłem w gałęzi master):
źródło
Aby wrócić do najnowszej wersji:
Na przykład
git checkout master
lubgit checkout dev
źródło
Po pierwsze, możesz sprawdzić, używając nazw oddziałów.
Wiem, że istnieje kilka sposobów na przesuwanie HEAD, ale zostawię to ekspertowi od gitów, aby je wyliczył.
Chciałem tylko zasugerować
gitk --all
- uznałem to za niezwykle pomocne, kiedy zaczynałem od git.źródło
Ja po prostu zaczynają kopać głębiej git, więc nie wiem, czy dobrze rozumiem, ale myślę, że prawidłowa odpowiedź na pytanie OP jest to, że można uruchomić
git log --all
ze specyfikacją formatu takiego:git log --all --pretty=format:'%h: %s %d'
. Oznacza to bieżącą wypisaną wersję jako(HEAD)
i możesz po prostu pobrać kolejną z listy.BTW, dodaj taki alias do swojego
.gitconfig
z nieco lepszym formatem i możesz uruchomićgit hist --all
:Jeśli chodzi o wersje względne, znalazłem ten post , ale mówi on tylko o starszych wersjach, prawdopodobnie nie ma nic do odniesienia do nowszych wersji.
źródło
Niektóre odpowiedzi tutaj zakładają, że jesteś w gałęzi master, zanim zdecydowałeś się pobrać starszą wersję zatwierdzenia. Nie zawsze tak jest.
Wskazuje ci powrót do gałęzi, w której byłeś (niezależnie od tego, czy był to master czy nie).
źródło
git checkout hash2
późniejgit checkout hash1
,git checkout -
zabierze Cię z powrotem dohash1
.Gdy wrócisz do poprzedniej wersji,
Możesz zobaczyć swój dziennik funkcji (skrót) za pomocą tego polecenia, nawet w tej sytuacji;
master
można zastąpić inną nazwą oddziału.Następnie sprawdź, będziesz mógł wrócić do tej funkcji.
źródło
W przypadku Git 2.23+ (sierpień 2019 r.) Najlepszą praktyką byłoby używanie
git switch
zamiast mylącegit checkout
polecenia.Aby utworzyć nowy oddział na podstawie starszej wersji:
Aby wrócić do bieżącej gałęzi głównej:
źródło
Bardziej eleganckim i prostym rozwiązaniem jest użycie
Powróci do najbardziej niechętnej lokalnej wersji oddziału, a także zapisze zmiany w skrytce, więc jeśli chcesz cofnąć to działanie, wykonaj:
źródło