Przejdź do konkretnej wersji

581

Sklonowałem repozytorium git określonego projektu. Czy mogę przywrócić pliki do stanu początkowego, a kiedy przeglądam pliki, przejdź do wersji 2, 3, 4 ... najnowszej? Chciałbym mieć przegląd tego, jak rozwijał się projekt.

xralf
źródło

Odpowiedzi:

872

Służy git checkout <sha1>do sprawdzania konkretnego zatwierdzenia.

Marcelo Cantos
źródło
2
Możesz to zrobić git log -n1. Ale jeśli się git checkoutnie powiedzie, to strata wysiłku.
Marcelo Cantos,
2
To działa. Musiałem użyć pełnego sha1 (nie częściowego). A jeśli chcę przełożyć projekt na drugą wersję? git logpokazuje teraz tylko pierwszy zatwierdzenie, czy mogę znaleźć sha1 następnego zatwierdzenia?
xralf
6
Powinieneś tylko użyć wystarczającej ilości sha1, aby zagwarantować wyjątkowość. Być może miałeś nieszczęśliwy zbieg okoliczności. Git nie ma pojęcia „następnego” zatwierdzenia; historia jest DAG ze wszystkimi strzałkami skierowanymi do tyłu. Powinieneś uruchomić git log --onelinei wkleić dane wyjściowe do pliku tekstowego w celach informacyjnych (zapewnione przez to skrócone sumy sha1 są unikalne). Inną opcją, jeśli twoja historia jest liniowa, jest ustalenie, ile jest zatwierdzeń od pierwszego zatwierdzenia masteri użycia git checkout master~543(jeśli jest 543 zatwierdzeń), a następnie git checkout master~542itd.
Marcelo Cantos
19
i jak wycofać się z bieżącego zatwierdzenia z „git checkout <sha1>”?
ア レ ッ ク ス
6
@AlexanderSupertramp Kasa oddziału.
Marcelo Cantos
50

Aby przejść do konkretnej wersji / zatwierdzenia, uruchom następujące polecenia. KOD HASŁA, z którego możesz uzyskaćgit log --oneline -n 10

git reset --hard HASH-CODE

Uwaga - Po zresetowaniu do konkretnej wersji / zatwierdzenia możesz uruchomić git pull --rebase, jeśli chcesz przywrócić wszystkie zatwierdzenia, które są odrzucane.

J4cK
źródło
1
Zauważ, że resetnie tylko kasa konkretny punkt na wykresie będzie również Najedź aktualnie wyrejestrowany oddział
Liam
Poza tym resetwszystkie oczekujące zmiany zostaną odrzucone.
WilliamKF,
2
- flaga flagi usunie wszelkie zatwierdzenia po wspomnianym haszu .... prawdopodobnie chcę tutaj dodać trochę tego kawałka. Jestem pewien, że ludzie stracili historię i zastanawiali się, dlaczego.
Urasquirrel
git pull --rebasedziała tylko wtedy, gdy masz pilota do repozytorium i jest aktualny.
Keith Thompson
19

Możesz uzyskać graficzny widok historii projektu za pomocą narzędzi takich jak gitk. Po prostu biegnij:

gitk --all

Jeśli chcesz pobrać konkretny oddział:

git checkout <branch name>

Dla konkretnego zatwierdzenia użyj skrótu SHA1 zamiast nazwy gałęzi. (Zobacz Treeishes w Git Community Book , który jest dobrym tekstem , aby zobaczyć inne opcje nawigacji po drzewie).

git log ma cały zestaw opcji do wyświetlania szczegółowej lub podsumowującej historii.

Nie wiem, jak łatwo przejść do przodu w historii zatwierdzeń. Projekty o historii liniowej prawdopodobnie nie są tak powszechne. Pomysł „rewizji” takiej jak w przypadku SVN lub CVS nie odwzorowuje tak dobrze w Git.

Mata
źródło
2
Pamiętaj: git nie będzie cię okłamywał, podając jedną liniową historię projektu. Jest tak, chyba że projekt faktycznie ewoluował w ten sposób.
Andres Jaan Tack
Posuwanie się naprzód jest logicznie pozbawione sensu (nawet w historii liniowej), ponieważ zatwierdzenie nie odnosi się do „przyszłości”. W najlepszym wypadku możesz zidentyfikować wszystkie zatwierdzenia, które mają przedmiotowe zatwierdzenie jako rodzic. Pamiętaj, że cofanie się nie jest również trywialnym ćwiczeniem z powodu fuzji.
Marcelo Cantos,
5

Używając klucza SHA1 zatwierdzenia, możesz wykonać następujące czynności:

  • Najpierw znajdź zatwierdzenie, które chcesz dla określonego pliku:

    git log -n <# commits> <file-name>

    To, w oparciu o twoje <# commits>, wygeneruje listę zatwierdzeń dla określonego pliku.

    Wskazówka: Jeśli nie jesteś pewien, co popełnić szukasz, to dobry sposób, aby dowiedzieć się za pomocą następującego polecenia: git diff <commit-SHA1>..HEAD <file-name>. To polecenie pokaże różnicę między bieżącą wersją zatwierdzenia a poprzednią wersją zatwierdzenia dla określonego pliku.

    UWAGA: klucz SHA1 zatwierdzenia jest sformatowany na git log -nliście jako:

popełnić <SHA1 id>

  • Po drugie, sprawdź żądaną wersję:

    Jeśli znalazłeś żądaną wersję zatwierdzenia / wersji, po prostu użyj polecenia: git checkout <desired-SHA1> <file-name>

    Spowoduje to umieszczenie wersji pliku określonej w obszarze testowym. Aby usunąć go z obszaru przeciwności, wystarczy użyć polecenia:reset HEAD <file-name>

Aby powrócić do miejsca, w którym wskazuje zdalne repozytorium, wystarczy użyć polecenia: git checkout HEAD <file-name>

Czarodziej
źródło
2

Byłem w sytuacji, gdy mamy gałąź master, a następnie kolejną gałąź o nazwie 17.0, a wewnątrz tej wersji 17.0 był hash zatwierdzania, nie mówiąc „XYZ” . A klient otrzymuje wersję do tej wersji XYZ. Teraz natrafiliśmy na błąd, który należy rozwiązać dla tego klienta. Musimy więc utworzyć osobny oddział dla tego klienta, aż do skrótu „xyz”. Oto jak to zrobiłem.

Najpierw utworzyłem folder z tą nazwą klienta na moim komputerze lokalnym. Powiedz, że nazwa klienta to „AAA” po utworzeniu tego folderu, wydaj następujące polecenie w tym folderze:

  1. git init
  2. git clone Po tym poleceniu będziesz w gałęzi master. Więc przełącz się na żądany oddział
  3. git checkout 17.0 Spowoduje to przejście do oddziału, w którym znajduje się zatwierdzenie
  4. git checkout To zajmie twoje repozytorium do zatwierdzenia skrótu. Zobacz nazwę oddziału ur, który został zmieniony na ten hash nr zatwierdzenia. Teraz nadaj nazwę gałęzi temu hashowi
  5. git oddział ABC Spowoduje to utworzenie nowego oddziału na komputerze lokalnym.
  6. Git Checkout ABC
  7. git push origin ABC Spowoduje to wypchnięcie tej gałęzi do zdalnego repozytorium i utworzenie gałęzi na serwerze git. Gotowe.
Ashish
źródło
1

Jednym ze sposobów byłoby utworzenie wszystkich zatwierdzeń kiedykolwiek dokonanych dla łatek. sprawdź początkowe zatwierdzenie, a następnie po przeczytaniu zastosuj łaty w kolejności.

użyj, git format-patch <initial revision>a następnie git checkout <initial revision>. powinieneś dostać stos plików w swoim reżyserze, zaczynając od czterech cyfr, które są łatkami.

kiedy skończysz czytać swoją wersję, po prostu rób, git apply <filename>co powinno wyglądać git apply 0001-*i liczyć.

Ale naprawdę zastanawiam się, dlaczego nie chcesz po prostu przeczytać samych poprawek? Proszę zamieść to w swoich komentarzach, ponieważ jestem ciekawy.

Podręcznik git daje mi to również:

git show next~10:Documentation/README

Pokazuje zawartość pliku Documentation / README, ponieważ były one obecne w 10. ostatnim zatwierdzeniu oddziału w następnej kolejności.

możesz również zajrzeć na stronę, git blame filenamektóra daje listę, w której każda linia jest powiązana z hashem zatwierdzającym + autorem.

Alex
źródło
1

Aby dostać się do określonego zatwierdzonego kodu, potrzebujesz kodu skrótu tego zatwierdzenia. Możesz uzyskać ten kod skrótu na dwa sposoby:

  1. Pobierz z konta github / gitlab / bitbucket. (Jest na twoim adresie zatwierdzenia, tj .: github.com/user/my_project/commit/ commit_hash_code ), lub możesz
  2. git logi sprawdź swoje ostatnie zatwierdzenia w tym oddziale. Pokaże ci kod skrótu twojego zatwierdzenia i wiadomość, którą zostawiłeś podczas zatwierdzania kodu. Po prostu skopiuj, a następnie zróbgit checkout commit_hash_code

Po przejściu do tego kodu, jeśli chcesz nad nim popracować i wprowadzić zmiany, powinieneś utworzyć kolejną gałąź git checkout -b <new-branch-name>, w przeciwnym razie zmiany nie zostaną zachowane.

Ianiv Hojman
źródło
0

Aby sprawdzić zatwierdzenie (patrz na przeszłość!).

  • git checkout „commmitHash”

Aby brutalnie zrestartować od zatwierdzenia i usunąć te późniejsze gałęzie, które prawdopodobnie pomieszałeś.

  • git reset --hard "commmitHash"
Jeremy
źródło