Jak jest git revert
używany?
To może brzmieć jak duplikatu pytanie, ale kiedy ludzie pytają go, odpowiedź jest często stosowanie git reset
zgodnie przywrócić zatwierdzenie przez hash SHA w Git?
Następnie, gdy ktoś zapyta, jak używać, git reset
ludzie odpowiedzą, że powinieneś użyć git revert
zgodnie z Git - jak wycofać
Zanim się zorientujesz, pojawiło się 8 różnych ludzi z własnymi unikalnymi sposobami uratowania tyłka OP, z których wszystkie są nad twoją głową.
Więc spróbujmy trzymać się briefu i napisać przewodnik dla opornych git revert
.
Scenariusz: dwukrotnie zobowiązałeś się do opanowania i jest zły. Popchnąłeś, a inni ludzie mają złe zmiany.
Chcesz to cofnąć. Nie jest to coś, co można ręcznie cofnąć w kodzie, powiedzmy, że jakiś kreator lub menedżer pakietów zmienił mnóstwo rzeczy w każdym miejscu - po prostu chcesz to wszystko przywrócić, jak było.
Na tym polega kontrola źródła. Jestem pewien, że to łatwe.
Okay, będziesz używać git revert
ale jak?
I po biegu git revert
musisz robić coś innego? Czy musisz zatwierdzić zmiany, cofnąć wprowadzone zmiany, czy przywrócić bezpośrednie zobowiązanie do repozytorium, czy co?
Oczywiście będziesz musiał ponownie naciskać i prawdopodobnie ogłosić swoje piłki zespołowi.
git revert -n <commitToRevet>
lubgit revert --no-commit <commitToRevet>
Użyj Git Revert w ten sposób:
git revert <insert bad commit hash here>
git revert
tworzy nowe zatwierdzenie ze zmianami, które są wycofywane.git reset
usuwa historię git zamiast tworzyć nowe zatwierdzenie.Kolejne kroki są takie same, jak w przypadku każdego innego zatwierdzenia.
źródło
Powód
reset
irevert
często pojawia się w tych samych rozmowach jest to, że różne systemy kontroli wersji używają ich do oznaczania różnych rzeczy.W szczególności ludzie, którzy są przyzwyczajeni do SVN lub P4, którzy chcą wyrzucić niezatwierdzone zmiany w pliku, często sięgają,
revert
zanim powiedzą im, że naprawdę chcąreset
.Podobnie,
revert
odpowiednik w innych VCS jest często nazywanyrollback
lub czymś podobnym - ale „wycofanie” może również oznaczać „Chcę całkowicie odrzucić kilka ostatnich zatwierdzeń”, co jest odpowiednie,reset
ale nierevert
. Jest więc wiele nieporozumień, gdy ludzie wiedzą, co chcą zrobić, ale nie są jasne, którego polecenia powinni użyć.Jeśli chodzi o twoje rzeczywiste pytania dotyczące przywracania ...
git revert first-bad-commit..last-bad-commit
Domyślnie
git revert
pyta o komunikat zatwierdzenia, a następnie zatwierdza wyniki. Można to zmienić. Cytuję stronę podręcznika :W szczególności, domyślnie tworzy nowe zatwierdzenie dla każdego przywracanego zatwierdzenia. Możesz użyć
revert --no-commit
do tworzenia zmian, które przywracają je wszystkie bez zatwierdzania tych zmian jako indywidualnych zatwierdzeń, a następnie zatwierdzaj w wolnym czasie.źródło
git revert first-bad-commit..last-bad-commit
: Myślę, że tak powinno byćgit revert parent-of-first-bad-commit..last-bad-commit
.Pytanie jest dość stare, ale powrót wciąż dezorientuje ludzi (takich jak ja)
Jako początkujący, po kilku próbach i błędach (więcej błędów niż prób) mam ważny punkt:
git revert
wymaga identyfikatora zatwierdzenia, które chcesz usunąć, zachowując go w historiigit reset
wymaga zatwierdzenia, które chcesz zachować , i w konsekwencji usunie wszystko później z historii.Oznacza to, że jeśli użyjesz
revert
z pierwszym identyfikatorem zatwierdzenia, znajdziesz się w pustym katalogu i dodatkowym zatwierdzeniu w historii, podczas gdy przy resetowaniu katalog zostanie ... przywrócony do początkowego zatwierdzenia, a historia będzie wyglądać tak, jakby ostatnie zatwierdzenie (a) nigdy się nie wydarzyło.Aby być jeszcze bardziej przejrzystym, z takim dziennikiem:
Użycie
git revert cb76ee4
will domyślnie przeniesie twoje pliki z powrotem do 01b56c6 i doda kolejne zatwierdzenie do twojej historii:git reset 01b56c6
zamiast tego przeniesie twoje pliki z powrotem do 01b56c6 i wyczyści każde inne zatwierdzenie po tym z twojej historii:Wiem, że to „podstawa”, ale było to dla mnie dość mylące, ponieważ działając
revert
na pierwszym id („pierwsze zatwierdzenie”) spodziewałem się znaleźć moje początkowe pliki, zajęło trochę czasu zanim zrozumiałem, że jeśli potrzebujesz swoich plików z powrotem jako „pierwsze zatwierdzenie” musisz użyć następnego id.źródło
Cofnąłem kilka zatwierdzeń, uruchamiając polecenie „git revert commit id”, na przykład:
Następnie zostałem poproszony o zatwierdzenie przywrócenia (tak jak w przypadku uruchomienia polecenia „git commit”). Mój domyślny program terminalowy to Vim, więc uruchomiłem:
W końcu wprowadziłem zmianę do repozytorium za pomocą:
źródło