Mam projekt w zdalnym repozytorium, zsynchronizowanym z lokalnym repozytorium (programowanie) i serwerowym (prod). Wprowadziłem pewne zatwierdzone zmiany, które zostały już przekazane do zdalnego i zostały pobrane z serwera. Teraz chcę cofnąć te zmiany. Więc mógłbym tylko git checkout
zatwierdzić przed zmianami i zatwierdzić nowe zmiany, ale domyślam się, że będą problemy z wypchnięciem ich ponownie na odległość. Wszelkie sugestie dotyczące dalszego postępowania?
609
Odpowiedzi:
Możesz cofnąć poszczególne zatwierdzenia za pomocą:
Spowoduje to utworzenie nowego zatwierdzenia, które przywróci zmiany określonego przez Ciebie zatwierdzenia. Zauważ, że przywraca tylko to konkretne zatwierdzenie, a potem nie zatwierdza. Jeśli chcesz cofnąć zakres zatwierdzeń, możesz to zrobić w następujący sposób:
Odwraca zatwierdzenia między określonymi zatwierdzeniami i włącznie.
Spójrz na stronie man git-revert uzyskać więcej informacji na temat
git revert
polecenia. Zobacz także tę odpowiedź, aby uzyskać więcej informacji na temat cofania zatwierdzeń.źródło
git log
<oldest_commit_hash>
się na liścieRozwiązanie, które nie zachowuje śladów „cofnięcia”.
UWAGA: nie rób tego, jeśli ktoś już wyciągnął Twoją zmianę (użyłbym tego tylko na moim osobistym repozytorium)
zrobić:
spowoduje to ponowne pobranie wszystkich aktualizacji lokalnie (więc status git wyświetli listę wszystkich zaktualizowanych plików)
następnie „wykonujesz swoją pracę” i ponownie zatwierdzasz zmiany (Uwaga: ten krok jest opcjonalny)
W tej chwili Twoje lokalne drzewo różni się od zdalnego
wypchnie i zmusi pilota do rozważenia tego wypchnięcia i usunięcia poprzedniego (określenie nazwy zdalnej i nazwy gałęzi nie jest obowiązkowe, ale zaleca się unikanie aktualizacji wszystkich gałęzi za pomocą flagi aktualizacji).
!! uważaj, niektóre tagi mogą nadal wskazywać usunięte zatwierdzenie !! how-to-delete-a-remote-tag
źródło
git push -f
ostatnie poprawne zatwierdzenie i zdalne wyczyszczenie historii! Dzięki!W tych przypadkach robię:
Na serwerze przesuń kursor z powrotem do ostatniego znanego dobrego zatwierdzenia:
Lokalnie wykonaj to samo:
Zobacz pełny przykład gałęzi
my_new_branch
, którą utworzyłem w tym celu:Oto najnowsza historia po dodaniu kilku elementów do
myfile.py
:Chcę pozbyć się ostatniego zatwierdzenia, które już zostało wypchnięte, więc uruchamiam:
Miły! Teraz widzę, że plik, który został zmieniony w tym commit (
myfile.py
) pokazuje w "not staged for commit":Ponieważ nie chcę tych zmian, po prostu przesuwam kursor lokalnie z powrotem:
Teraz HEAD znajduje się w poprzednim zatwierdzeniu, zarówno lokalnym, jak i zdalnym:
źródło
Możesz ODWRÓCIĆ (lub możesz również nazwać to USUŃ ) Git Commit OBU lokalnie i zdalnie, jeśli wykonasz kroki podane poniżej za pomocą wiersza poleceń git.
Uruchom następujące polecenie, aby zobaczyć identyfikator zatwierdzenia, który chcesz przywrócić
Otrzymasz następujący zrzut ekranu
Jeśli sprawdzisz także zdalnie (przez interfejs sieciowy) , zobaczysz, że byłoby to takie samo, jak pokazano poniżej
Zgodnie ze zrzutem ekranowym aktualnie zatwierdzasz identyfikator e110322, ale chcesz wrócić do 030bbf6 ZARÓWNO LOKALNIE i ZDALNIE .
Wykonaj następujące kroki, aby USUNĄĆ / ZWRÓCIĆ zatwierdzenia lokalnie + zdalnie
Najpierw przywracanie lokalne, aby zatwierdzić identyfikator 030bbf6
śledzony przez
Te dwa polecenia wyczyść wymuszają resetowanie, aby zatwierdzić etap 030bbf6, jak pokazano poniżej na zdjęciu
teraz, jeśli uruchomisz status git, zobaczysz, że DWA Zatwierdzasz ZAZ zdalnej gałęzi, jak pokazano poniżej
Uruchom następujące, aby zaktualizować swoje indeksy (jeśli są jakieś aktualizacje). Zaleca się, aby poprosić wszystkich programistów, aby nie przyjmowali żadnych żądań ściągania w głównym oddziale zdalnym.
Kiedy to zrobisz, będziesz musiał wcisnąć to mocno , używając symbolu + przed gałęzią, jak pokazano poniżej. Użyłem tutaj jako gałęzi master , możesz ją zastąpić dowolną
Kod
teraz, jeśli zobaczysz interfejs sieciowy pilota, to zatwierdzenie również powinno zostać cofnięte.
źródło
Spowoduje to usunięcie wypychanych zatwierdzeń
źródło
W powyższym wierszu kodu. „Ostatni argument reprezentuje”
1 - cofa jedno zatwierdzenie.
2 - przywraca ostatnie dwa zatwierdzenia.
n - cofa ostatnie n zatwierdzeń.
Musisz nacisnąć po tym poleceniu, aby zadziałać na pilocie. Masz inne opcje, takie jak określenie zakresu zatwierdzeń do przywrócenia. To jest jedna z opcji.
Później korzystanie
git commit -am "COMMIT_MESSAGE"
następniegit push
albogit push -f
źródło
git revert ref1..ref2
2020 Prosty sposób:
(Hash ostatniego zatwierdzenia, który chcesz zachować).
Zachowasz teraz niezatwierdzone zmiany lokalnie.
Jeśli chcesz ponownie naciskać, musisz:
źródło
Oto moja droga:
Powiedzmy, że nazwa oddziału to
develop
.źródło
Możesz zrobić coś takiego
źródło