Jak przywrócić (zresetować) repozytorium Git do określonego commita? [duplikat]

To pytanie ma już odpowiedź tutaj:

Sklonowałem repozytorium Git, a następnie próbowałem przywrócić je do konkretnego commita na początku procesu tworzenia. Wszystko co zostało dodane do repozytorium po tym punkcie jest dla mnie nieistotne więc chcę pominąć wszystkie późniejsze zmiany z mojego lokalnego kodu źródłowego.

Jednak, gdy próbuję wrócić do narzędzia GUI, nie aktualizuje To mojego lokalnego systemu plików - zawsze kończę z najnowszym kodem źródłowym projektu.

Jaki jest prawidłowy sposób, aby po prostu uzyskać źródło dla repozytorium od konkretnego commita w historii projektu i pominąć wszystkie późniejsze aktualizacje?

 640
git
Author: Retro Gamer, 2009-10-24

4 answers

git reset --hard <tag/branch/commit id>

Przypisy:

  • git reset bez opcji --hard resetuje historię zatwierdzeń, ale nie Pliki. Za pomocą opcji --hard pliki w drzewie roboczym są również resetowane. (zapisany użytkownik)

  • Jeśli Chcesz zatwierdzić ten stan tak, aby zdalne repozytorium wskazywało również na wycofany commit do: git push <reponame> -f (zarejestrowany użytkownik)

 1002
Author: kauppi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-18 23:59:28

Aktualizacja:

Ze względu na zmiany w sposobie tworzenia i wypychania gałęzi śledzenia nie zalecam już zmiany nazw gałęzi. To jest to, co polecam teraz:

Zrób kopię gałęzi w jej obecnym stanie:

git branch crazyexperiment

(The git branch <name> Komenda pozostawi cię z bieżącą gałęzią nadal sprawdzoną.)

Zresetuj bieżącą gałąź do żądanego commita za pomocą git reset:

git reset --hard c2e7af2b51

(Zamień c2e7af2b51 na commit, który chcesz przejść z powrotem do.)

Kiedy zdecydujesz, że Twoja gałąź crazy experiment nie zawiera niczego użytecznego, możesz ją usunąć za pomocą:

git branch -D crazyexperiment

To zawsze miłe, gdy zaczynasz od modyfikowania historii poleceń Gita (reset, rebase), aby utworzyć gałęzie kopii zapasowych przed ich uruchomieniem. W końcu, gdy poczujesz się komfortowo, nie uznasz tego za konieczne. Jeśli zmienisz swoją historię w sposób, który nie chcesz i nie utworzyłeś gałęzi kopii zapasowej, zajrzyj do git reflog. Git utrzymuje commity przez dłuższy czas, nawet jeśli nie ma żadnych gałęzi ani znaczników wskazujących na nie.

Oryginalna odpowiedź:

Nieco mniej przerażającym sposobem na to niż metoda git reset --hard jest utworzenie nowej gałęzi. Załóżmy, że jesteś w gałęzi master, a commit, do którego chcesz wrócić to c2e7af2b51.

Zmień nazwę bieżącej gałęzi master:

git branch -m crazyexperiment

Sprawdź swój dobry commit:

git checkout c2e7af2b51

Stwórz nową gałąź master tutaj:

git checkout -b master

Teraz masz jeszcze swoje szalony eksperyment wokół, jeśli chcesz spojrzeć na to później, ale twoja gałąź master jest z powrotem w ostatnim znanym dobrym punkcie, gotowy do dodania do. Jeśli naprawdę chcesz wyrzucić swój eksperyment, możesz użyć:

git branch -D crazyexperiment
 376
Author: Neall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-17 13:18:42

Dla tych, którzy mają wygięty gui git, możesz również użyć gitk.

Kliknij prawym przyciskiem myszy commit, do którego chcesz powrócić i wybierz "Resetuj gałąź główną tutaj". Następnie wybierz twardy z następnego menu.

 12
Author: ReggieB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 13:57:07

Kiedy mówisz 'narzędzie GUI', zakładam, że używasz Git dla Windows.

Ważne, Gorąco polecam stworzenie nowej gałęzi, aby to zrobić, jeśli jeszcze tego nie zrobiłeś. W ten sposób twój mistrz może pozostać taki sam, podczas gdy ty testujesz swoje zmiany.

Z GUI musisz 'cofnąć ten commit' tak jak masz z historią po prawej stronie widoku. Wtedy zauważysz, że masz wszystkie niechciane pliki jako zmiany do zatwierdzenia po lewej stronie. Teraz musisz kliknąć prawym przyciskiem myszy na szary tytuł nad wszystkimi niezatwierdzonymi plikami i wybierz "lekceważ zmiany". Spowoduje to przywrócenie plików do stanu, w jakim były w tej wersji.

 1
Author: huff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-14 14:33:42