Jak mogę cofnąć się do konkretnego zatwierdzenia w git ?
Najlepszą odpowiedzią, git revert
jaką ktoś mógł mi dać, było użycie X razy, aż dotrę do pożądanego zatwierdzenia.
Powiedzmy więc, że chcę wrócić do zatwierdzenia, które ma 20 starych zatwierdzeń, musiałbym uruchomić go 20 razy.
Czy jest na to łatwiejszy sposób?
Nie mogę użyć resetowania, ponieważ to repozytorium jest publiczne.
git
git-checkout
git-revert
David
źródło
źródło
Odpowiedzi:
Spróbuj tego:
gdzie
[revision]
jest skrót zatwierdzenia (na przykład:)12345678901234567890123456789012345678ab
.Nie zapomnij
.
na końcu, bardzo ważne. Spowoduje to zastosowanie zmian do całego drzewa. Powinieneś wykonać to polecenie w katalogu głównym projektu git. Jeśli znajdujesz się w dowolnym podkatalogu, to polecenie zmienia tylko pliki w bieżącym katalogu. Następnie popełnij i powinieneś być dobry.Możesz to cofnąć przez
spowoduje to usunięcie wszystkich modyfikacji z katalogu roboczego i obszaru przejściowego.
źródło
Aby przywrócić do określonego zatwierdzenia:
Aby wycofać 10, zatwierdza wycofanie:
Możesz użyć „git revert” jak w poniższym poście, jeśli nie chcesz przepisać historii
Jak przywrócić repozytorium Git do poprzedniego zatwierdzenia?
źródło
Myślę, że pytanie brzmi: co rozumiesz przez „wycofanie”? Jeśli nie możesz,
reset
ponieważ jest to publiczne i chcesz zachować nienaruszoną historię zatwierdzeń, czy masz na myśli, że chcesz, aby kopia robocza odzwierciedlała konkretne zatwierdzenie? Użyjgit checkout
i skrótu zatwierdzenia.Edycja: Jak wskazano w komentarzach, użycie
git checkout
bez określenia gałęzi pozostawi cię w stanie „bez rozgałęzienia”. Użyjgit checkout <commit> -b <branchname>
do kasy do oddziału lubgit checkout <commit> .
do kasy do bieżącej gałęzi.źródło
git checkout
- może sprawdzić w dowolnym oddziale (obecnym lub nowym), który sobie życzy. Zaktualizuję moją odpowiedź, aby nie była dwuznaczna.git reset
usunąć te pliki, o których mówisz, że nie chcesz tego robić. Spróbuj zrobić to w osobnej gałęzi: w tej gałęzigit checkout <commit> -b <branchname>
nie będzie plików stojących .checkout
polega na tym, że nie usuwa plików, które zostały dodane w poprzednim zatwierdzeniu.Oryginalny plakat stwierdza:
Używanie
git revert
X razy nie jest konieczne .git revert
może zaakceptować zakres zatwierdzeń jako argument, więc wystarczy go użyć tylko raz, aby cofnąć zakres zatwierdzeń. Na przykład, jeśli chcesz cofnąć ostatnie 20 zatwierdzeń:Commit zakres
HEAD~20..
jest skrótemHEAD~20..HEAD
i oznacza „rozpocznie się od 20 th rodzic główki popełnił, i przywrócić wszystkie rewizje po to do głowy”.Spowoduje to cofnięcie ostatnich 20 zatwierdzeń, przy założeniu, że żadne z nich nie jest zatwierdzone przez scalenie. Jeśli istnieją zatwierdzenia scalania, nie możesz cofnąć ich wszystkich za pomocą jednego polecenia, musisz cofnąć je indywidualnie za pomocą
Zauważ też, że testowałem przy użyciu zakresu z
git revert
użyciem gita w wersji 1.9.0. Jeśli używasz starszej wersji git, użycie zakresu zgit revert
może, ale nie musi, działać.W takim przypadku
git revert
jest preferowanygit checkout
.Zauważ, że w przeciwieństwie do tej odpowiedzi, która mówi, aby użyć
git checkout
,git revert
faktycznie usunie wszystkie pliki, które zostały dodane w jednym z przywracanych zatwierdzeń , co sprawia, że jest to właściwy sposób na przywrócenie szeregu wersji.Dokumentacja
źródło
Krok 1: Pobierz listę zatwierdzeń:
Otrzymasz listę jak w tym przykładzie:
Krok 2: Skopiuj potrzebny skrót zatwierdzenia i wklej go do kasy:
To wszystko.
źródło
zrobię to. Jest to „git checkout”, ale bez aktualizacji HEAD.
Możesz osiągnąć ten sam efekt za pomocą
jeśli wolisz łączenie poleceń wygody razem.
To pozostawia z twoim drzewem pracy i indeksem w pożądanym stanie, możesz po prostu
git commit
zakończyć.źródło
Chcesz odłączony HEAD?
Jeśli chcesz cofnąć czas X do określonego zatwierdzenia z ODŁĄCZONĄ GŁOWĄ (co oznacza, że nie możesz niczego zepsuć), to we wszystkich przypadkach skorzystaj z następujących opcji:
(zamień X na liczbę zatwierdzeń, które chcesz cofnąć)
IE, aby wrócić o jedno zatwierdzenie:
źródło
Powiedzmy, że pracujesz nad projektem i po około dniu. Zauważ, że jedna funkcja nadal powoduje błędy. Ale nie wiesz, jaką zmianę wprowadziłeś, co spowodowało błąd. Więc musisz wyłowić poprzednie robocze zobowiązania. Aby powrócić do konkretnego zatwierdzenia:
Ok, więc zatwierdzenie działa dla ciebie. Nigdy więcej błędu. Wskazałeś problem. Teraz możesz wrócić do ostatniego zatwierdzenia:
I sprawdź konkretny plik, zanim spowodował błąd (w moim przypadku korzystam z przykładu Gemfile.lock):
Jest to jeden ze sposobów radzenia sobie z błędami, które stworzyłeś w commits, bez uświadomienia sobie błędów do późniejszego momentu.
źródło
Identyfikator zatwierdzenia powiązany z każdym zatwierdzeniem znajduje się w sekcji zatwierdzeń GitHub / BitBucket / Gitlab. To bardzo proste, załóżmy, że twój identyfikator zatwierdzenia to 5889575, a jeśli chcesz wrócić do tej części kodu, po prostu musisz wpisać
Spowoduje to przejście do tego momentu w kodzie.
źródło
Nie jestem pewien, co się zmieniło, ale nie jestem w stanie sprawdzić konkretnego zatwierdzenia bez opcji
--detach
. Pełne polecenie, które działało dla mnie, to:git checkout --detach [commit hash]
Aby wrócić z odłączonego stanu, musiałem sprawdzić mój lokalny oddział:
git checkout master
źródło
master
rozwiązuje problem pozostawania odłączonym, podczas pracygit reset --hard
lubgit checkout -- .
działał, ale pozostał odłączonyOto przykład, aby to zrobić
źródło