Jak przywrócić (zresetować) repozytorium Git do określonego commita? [duplikat]
To pytanie ma już odpowiedź tutaj:
- Jak przywrócić repozytorium Git do poprzedniego commita 39 odpowiedzi
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?
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)
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
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.
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.
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