Mam zdalne repozytorium Git i muszę cofnąć ostatnie n
zatwierdzenia do zimnego zapomnienia.
111
Możesz użyć git revert <commit>…
dla wszystkich n zatwierdzeń, a następnie push jak zwykle, zachowując historię bez zmian.
Lub możesz „wycofać” za pomocą git reset --hard HEAD~n
. Jeśli pchasz w repozytorium publiczne lub współdzielone, możesz odejść i przerwać pracę innych w oparciu o swoją oryginalną gałąź. Git ci to uniemożliwi, ale możesz użyć, git push -f
aby wymusić aktualizację.
git reset --hard [sha1]
gdzie sha1 jest identyfikatorem skrótu zatwierdzenia.revert
spowoduje, że twoje gałęzie funkcji będą traktowane jako „już” połączone. Dzieje się tak, ponieważ te gałęzie są rzeczywiście łączone. Ale zmiany zostały cofnięte. Rozwiązanie: Cherry-pick lub przywrócić powracają popełnić .reset --hard
również, że gałęzie funkcji są traktowane jako już scalone? Moje założenie jest takie, że nie (gdzierevert
by).elmarco ma rację ... jego sugestia jest najlepsza dla repozytoriów współdzielonych / publicznych (lub przynajmniej oddziałów publicznych). Jeśli nie został udostępniony (lub chcesz przeszkadzać innym), możesz również wcisnąć konkretny ref:
Lub, jeśli istnieje konkretny commit SHA1 (powiedz 1e4f99e w skróconej formie), do którego chcesz wrócić:
źródło
Na szczęście mogłem użyć rozwiązania Pata Notza, które całkowicie usunęło niechciane zatwierdzenie. Jednak początkowo otrzymałem błąd
Ale dodanie opcji force (
-f
) nadpisuje ten błądźródło
Jeśli masz bezpośredni dostęp do zdalnego repozytorium, zawsze możesz użyć:
Działa to, ponieważ nie ma próby modyfikacji nieistniejącego katalogu roboczego. Aby uzyskać więcej informacji, zapoznaj się z oryginalną odpowiedzią:
Jak mogę cofnąć ostatnie zatwierdzenie w repozytorium git bare?
źródło
--soft
być konieczne? Prawdopodobnie mógłbyś zrobić to samo z prostymgit reset
, bez flagi trybu.