Odpowiedzi:
git reset --hard HEAD~1
git push -f <remote> <branch>
(Przykład przycisku: git push -f origin bugfix/bug123
)
Spowoduje to cofnięcie ostatniego zatwierdzenia i przekazanie zaktualizowanej historii do pilota. Musisz przekazać, -f
ponieważ zastępujesz historię nadrzędną na pilocie.
git log --decorate --oneline
aby dowiedzieć się, gdzie wskazuje HEAD.
git reset HEAD~1
jeśli nie chcesz, aby twoje zmiany zniknęły (zmiany niestacjonarne). Zmień, zatwierdź i pchnij ponowniegit push -f [origin] [branch]
Zasadniczo dokonaj „odwrotnego” zatwierdzenia, używając:
git revert 364705c
następnie wyślij go do pilota jak zwykle:
git push
Nie spowoduje to usunięcia zatwierdzenia: powoduje dodatkowe zatwierdzenie, które powoduje cofnięcie tego, co zrobiło pierwsze zatwierdzenie. Wszystko inne, niezbyt bezpieczne, szczególnie gdy zmiany zostały już rozpowszechnione.
git reset
jest akceptowane tylko, jeśli zmiany nie zostały jeszcze przesłane do serwera.
Po pierwsze, zrelaksuj się.
„Nic nie jest pod naszą kontrolą. Nasza kontrola jest jedynie iluzją.”, „Błędem jest człowiek”
Rozumiem, że przypadkowo popchnąłeś swój kod remote-master
. TO będzie w porządku.
1. Najpierw uzyskaj SHA-1
wartość zatwierdzenia, które próbujesz zwrócić, np. Zatwierdzenie do gałęzi master. Uruchom to:
git log
zobaczysz kilka „f650a9e398ad9ca606b25513bd4af9fe ...” jak ciągi wraz z każdym z zatwierdzeń. skopiuj ten numer z zatwierdzenia, który chcesz zwrócić .
2. Teraz wpisz poniższe polecenie:
git reset --hard your_that_copied_string_but_without_quote_mark
powinieneś zobaczyć komunikat „HEAD jest teraz w”. jesteś czysty. To, co właśnie zrobił, to lokalne odzwierciedlenie tej zmiany.
3. Teraz wpisz poniższe polecenie:
git push -f
powinieneś zobaczyć jak
"ostrzeżenie: push.default jest rozbrojony; jego wartość domyślna zmieniła się w ..... ... Razem 0 (delta 0), ponownie użyta 0 (delta 0) ... ... twoja_nazwa_gałęzi - - master (wymuszona aktualizacja) . ”
Teraz wszystko jasne. Sprawdź ponownie master za pomocą „git log”, twoje fixed_destination_commit powinno znajdować się na górze listy.
Serdecznie zapraszamy (z góry;))
AKTUALIZACJA:
Teraz zmiany, które wprowadziłeś, zanim te wszystkie się zaczęły, zniknęły. Jeśli chcesz przywrócić te ciężkie prace, jest to możliwe. Dzięki git reflog i git komendom cherry-pick .
W tym celu sugeruję śledzenie tego bloga lub tego postu .
Możesz zrobić interaktywną bazę:
git rebase -i <commit>
Spowoduje to wyświetlenie domyślnego edytora. Wystarczy usunąć wiersz zawierający zatwierdzenie, które chcesz usunąć, aby usunąć to zatwierdzenie.
Będziesz oczywiście potrzebował dostępu do zdalnego repozytorium, aby również zastosować tę zmianę.
Zobacz to pytanie: Git: usuwanie wybranych zatwierdzeń z repozytorium
Spróbuj użyć
git reset --hard <commit id>
Uwaga: tutaj identyfikator zatwierdzenia będzie identyfikatorem zatwierdzenia, do którego chcesz przejść, ale nie identyfikatorem, który chcesz zresetować. to był jedyny punkt, w którym również utknąłem.
następnie pchnij
git push -f <remote> <branch>
git reset --hard <the-sha-you-want-to-return-to>
.