Popełniłem błąd i nie wiem, jak usunąć mój ostatni push w repozytorium. Pobieram najnowsze aktualizacje aplikacji, ale występują konflikty i wysyłam ją do repozytorium.
Jak usunąć moje ostatnie zatwierdzenie? Albo jak to naprawić?
źródło
Popełniłem błąd i nie wiem, jak usunąć mój ostatni push w repozytorium. Pobieram najnowsze aktualizacje aplikacji, ale występują konflikty i wysyłam ją do repozytorium.
Jak usunąć moje ostatnie zatwierdzenie? Albo jak to naprawić?
Po pierwsze, jeśli pracujesz z innymi osobami na tym samym repozytorium kodu, nie powinieneś usuwać zatwierdzenia, ponieważ wymuszenie aktualizacji repozytorium pozostawi lokalne repozytoria Twoich współpracowników w nielegalnym stanie (np. dokonane zatwierdzenia po usuniętym, te zatwierdzenia będą nieprawidłowe, ponieważ były oparte na nieistniejącym zatwierdzeniu).
Powiedział, że możesz cofnąć zatwierdzenie. Ta procedura jest wykonywana inaczej (różne polecenia) w zależności od używanego CVS:
Na git :
git revert <commit>
Na mercurial :
hg backout <REV>
EDYCJA: Operacja przywracania tworzy nowe zatwierdzenie, które robi odwrotnie niż przywrócone zatwierdzenie (np. Jeśli oryginalne zatwierdzenie dodało linię, zatwierdzenie cofnięcia usuwa tę linię), skutecznie usuwając zmiany w niepożądanym zatwierdzeniu bez przepisywania historii repozytorium.
git backout <REV>
? Albohg backout <REV>
:?Jeśli nie pracujesz z innymi (lub z przyjemnością sprawiasz im znaczną irytację) , możesz usunąć commity z gałęzi bitbucket.
Jeśli próbujesz zmienić gałąź inną niż główna:
jeśli próbujesz zmienić gałąź główną
Generalnie w gicie gałąź główna nie jest wyjątkowa - to tylko konwencja. Jednak bitbucket, github i podobne strony zwykle wymagają, aby istniała główna gałąź (prawdopodobnie dlatego, że jest to łatwiejsze niż pisanie większej ilości kodu do obsługi zdarzenia, w którym repozytorium nie ma gałęzi - nie jestem pewien). Musisz więc utworzyć nową gałąź i ustawić ją jako główną:
W Bitbucket przejdź do ustawień repozytorium i zmień „gałąź główną” na
master_temp
(na Github zmień „gałąź domyślną”).Teraz przejdź do Bitbucket i powinieneś zobaczyć żądaną historię. Możesz teraz przejść do strony ustawień i zmienić gałąź główną z powrotem na
master
.Ten proces będzie również działał z innymi zmianami historii (np
git filter-branch
.). Musisz tylko upewnić się, że zresetowałeś do odpowiednich zatwierdzeń, zanim nowa historia oddzieli się od starej.edycja : najwyraźniej nie musisz przechodzić do tych wszystkich kłopotów na githubie, ponieważ możesz wymusić reset gałęzi .
Radzenie sobie z zirytowanymi współpracownikami
Następnym razem, gdy ktoś spróbuje pobrać z twojego repozytorium (jeśli już ściągnął złe zatwierdzenie), ściąganie zakończy się niepowodzeniem. Będą musieli ręcznie zresetować do zatwierdzenia przed zmianą historii, a następnie ponownie pociągnąć.
Jeśli wyciągnęli złe zatwierdzenie i popełnili po nim , to będą musieli zresetować, a następnie
git cherry-pick
dobre zatwierdzenia, które chcą utworzyć, skutecznie odtwarzając całą gałąź bez złego zatwierdzenia.Jeśli nigdy nie popełnili złego zobowiązania, cały ten proces nie wpłynie na nich i będą mogli zrobić to normalnie.
źródło
możesz zresetować,
HEAD^
a następnie wymusić wciśnięcie.Spowoduje to usunięcie ostatniego zatwierdzenia i zostanie odzwierciedlone w bitbuckecie jako usunięte zatwierdzenie, ale nadal pozostanie na ich serwerze.
źródło
Oto proste podejście w maksymalnie 4 krokach:
0 - Poinformuj zespół, że zamierzasz naprawić repozytorium
Połącz się z zespołem i poinformuj ich o nadchodzących zmianach.
1 - Usuń ostatnie zatwierdzenie
Zakładając, że Twoja gałąź docelowa to
master
:W tym momencie jesteś skończony, jeśli pracujesz sam.
2 - Napraw lokalne repozytoria swojego kolegi z drużyny
Na kolegach z drużyny:
Jeśli twój kolega z drużyny nie miał nowych zatwierdzeń, w tym momencie jesteś skończony i powinieneś być zsynchronizowany.
3 - Przywracanie utraconych zatwierdzeń
Powiedzmy, że kolega z zespołu ma nowe i nieopublikowane zatwierdzenie, które zostało utracone w tym procesie.
Zrób to dla tylu zatwierdzeń, ile potrzeba.
Wielokrotnie z powodzeniem stosowałem to podejście. Zapewnienie synchronizacji wszystkiego wymaga pracy zespołowej.
źródło
W przeszłości miałem problemy z przywracaniem git (głównie dlatego, że nie jestem do końca pewien, jak to działa). Miałem problemy z przywróceniem z powodu problemów ze scalaniem.
Moje proste rozwiązanie jest takie.
Krok 1.
Twój projekt w innym folderze, a następnie:
Krok 2.
następnie Krok 3.
w swoim najnowszym (i głównym) katalogu projektu (tym, który ma problematyczne ostatnie zatwierdzenie) wklej pliki z kroku 2
Krok 4.
Krok 5.
Cieszyć się
źródło
git revert
jest proste: tworzy nowe zatwierdzenie, które odwraca zmiany w poprzednim zatwierdzeniu (lub wielu zatwierdzeniach). Nie usuwa zatwierdzeń, więc nie ma znaczenia dla tego pytania. Ponadto krok klonowania tutaj nie jest naprawdę konieczny.Jak powiedzieli inni, zwykle chcesz użyć
hg backout
lubgit revert
. Jednak czasami naprawdę chcesz pozbyć się zatwierdzenia.Najpierw będziesz chciał przejść do ustawień repozytorium. Kliknij
Strip commits
łącze.Wprowadź identyfikator zestawu zmian, który chcesz zniszczyć, i kliknij
Preview strip
. Dzięki temu zobaczysz, jakie szkody zamierzasz wyrządzić, zanim to zrobisz. Następnie kliknij,Confirm
a Twoje zatwierdzenie nie jest już historią. Upewnij się, że powiedziałeś wszystkim swoim współpracownikom, co zrobiłeś, aby przypadkowo nie odepchnęli naruszającego commita z powrotem.źródło
Po zatwierdzeniu zmian nie będzie można ich usunąć. ponieważ podstawową naturą commita nie jest usuwanie.
Co możesz zrobić (łatwa i bezpieczna metoda),
Interaktywny Rebase:
1)
git rebase -i HEAD~2
# pokaże ostatnie 2 zatwierdzenia2) Twoje zatwierdzenie wyświetli się w następujący sposób, Ostatnie pojawi się na dole strony LILO (ostatnie w Last Out)
Całkowicie usuń ostatni wiersz zatwierdzenia
3) zapisz go przez
ctrl+X
lubESC:wq
teraz twoja gałąź zostanie zaktualizowana bez twojego ostatniego zatwierdzenia.
źródło
Możesz napisać polecenie również dla Bitbucket, jak wspomniał Dustin :
Aby usunąć ostatnie zatwierdzenie lokalnie w git, użyj:
źródło
W tej chwili bitbucket w chmurze (nie jestem pewien, która wersja) pozwala na przywrócenie zatwierdzenia z systemu plików w następujący sposób (nie widzę, jak cofnąć się z interfejsu Bitbucket w przeglądarce Chrome).
- wykonaj kopię zapasową całego katalogu, aby zabezpieczyć zmiany, które zostały nieumyślnie wprowadzone
-wybierz wyewidencjonowany katalog
- prawy przycisk myszy: menu git żółwia
-repo-browser (opcja menu „revert” cofa tylko niezatwierdzone zmiany)
-naciśnij przycisk HEAD
-wybierz najwyższą linię (ostatnie zatwierdzenie)
- prawy przycisk myszy: cofnij zmianę przez to zatwierdzenie
- po cofnięciu zmian w systemie plików naciśnij commit
-To aktualizuje GIT z komunikatem „Przywróć (poprzednia wiadomość). To przywraca popełnienie takiego a takiego ''
-wybierz „Zatwierdź i wypchnij”.
źródło