Właśnie zrobiłem idealnie dobre zobowiązanie do niewłaściwej gałęzi. Jak cofnąć ostatnie zatwierdzenie w mojej gałęzi master, a następnie wprowadzić te same zmiany i wprowadzić je do mojej gałęzi aktualizacji?
git
git-commit
mikewilliamson
źródło
źródło
git reset --soft HEAD\^
4 lata spóźnienia na ten temat, ale może to być komuś pomocne.
Jeśli zapomniałeś utworzyć nowy oddział przed zatwierdzeniem i zatwierdzeniem wszystkiego na masterie, bez względu na to, ile zrobiłeś zatwierdzeń, poniższe podejście jest łatwiejsze:
Teraz masz gałąź master równą
origin/master
i wszystkie nowe zatwierdzenia są włączonemy_feature
. Pamiętaj, żemy_feature
jest to oddział lokalny, a nie zdalny.źródło
master
, a następnie zresetowaćmaster
doorigin/master
.origin/master
jest już na zatwierdzeniu, którego chcesz zresetować! KredytemJeśli masz czystą (niezmodyfikowaną) kopię roboczą
Aby cofnąć jeden zatwierdzenie (pamiętaj, aby zanotować skrót zatwierdzenia dla następnego kroku):
Aby pobrać to zatwierdzenie do innej gałęzi:
Jeśli zmodyfikowałeś lub nieśledziłeś zmiany
Należy również pamiętać, że
git reset --hard
będą zabijać żadnych nieśledzone i zmodyfikowanych zmian można mieć, więc jeśli masz ci może wolisz:źródło
git rev-parse BRANCH_NAME
zdobyć sha.git reflog show <branch>
!git stash
przed zresetowaniem i użyć gogit stash pop
później, aby je przywrócić, więc nie trzeba się bać--hard
częściJeśli zmiany zostały już wprowadzone, konieczne będzie wymuszenie następnego naciśnięcia po zresetowaniu HEAD.
Ostrzeżenie: twardy reset spowoduje cofnięcie wszelkich niezatwierdzonych modyfikacji w kopii roboczej, natomiast wymuszenie wypchnie całkowicie stan zdalnej gałęzi aktualnym stanem gałęzi lokalnej.
Na wszelki wypadek w systemie Windows (przy użyciu wiersza polecenia systemu Windows, a nie Bash) jest to właściwie cztery
^^^^
zamiast jednego, więc jestźródło
git reset --hard COMMIT_HASH
git push --force
Niedawno zrobiłem to samo, gdzie przypadkowo popełniłem zmianę na mistrza, kiedy powinienem był poświęcić się innej gałęzi. Ale niczego nie naciskałem.
Jeśli po prostu popełniłeś błąd w niewłaściwej gałęzi i od tego czasu nic nie zmieniłeś i nie wypchnąłeś repozytorium, możesz wykonać następujące czynności:
UWAGA: w powyższym przykładzie przewinąłem 1 zatwierdzenie z git reset HEAD ~ 1. Ale jeśli chcesz przewinąć n zatwierdzeń, możesz zresetować HEAD ~ n.
Ponadto, jeśli ostatecznie popełniłeś błąd w niewłaściwej gałęzi, a także napisałeś trochę kodu, zanim zdasz sobie sprawę, że popełniłeś błąd w niewłaściwej gałęzi, możesz użyć git stash, aby zapisać swoją pracę w toku:
UWAGA: Użyłem tej strony jako odnośnika https://www.clearvision-cm.com/blog/what-to-do-when-you-commit-to-the-wrong-git-branch/
źródło
git checkout -b new_branch
od razu, zmiany były nietknięte, po prostu wypchnąłem i utworzyłem PR, nie zrobiłem tego muszę ponownie popełnić.Więc jeśli twoim scenariuszem jest zobowiązanie,
master
ale zobowiązanie się do tegoanother-branch
(które może, ale nie musi już istnieć), ale jeszcze tego nie zrobiłeś, jest to dość łatwe do naprawienia.Teraz wszystkie twoje zobowiązania
master
będą włączoneanother-branch
.Pozyskane z miłości od: http://haacked.com/archive/2015/06/29/git-migrate/
źródło
another-branch
już istniał W tym przypadku po prostu zniweczyło zobowiązania, które podjąłem do opanowania, i ich nie założyłemanother-branch
.Aby rozwinąć tę odpowiedź, w przypadku gdy masz wiele zatwierdzeń do przejścia, np.
develop
Donew_branch
:źródło
Jeśli napotkasz ten problem i masz program Visual Studio, możesz wykonać następujące czynności:
Kliknij oddział prawym przyciskiem myszy i wybierz
View History
:Kliknij zatwierdzenie prawym przyciskiem myszy, do którego chcesz wrócić. I w razie potrzeby przywróć lub zresetuj.
źródło
Dla wielu zatwierdzeń w niewłaściwej gałęzi
Jeśli dla ciebie jest to tylko 1 zatwierdzenie, istnieje wiele innych łatwiejszych rozwiązań resetowania. Dla mnie przypadkowo wykonałem około 10 zobowiązań
master
, nazwijmy tobranch_xyz
, i nie chciałem stracić historii .To, co możesz zrobić, a co mnie uratowało, to użycie tej odpowiedzi jako odniesienia, przy użyciu 4-etapowego procesu, czyli:
master
branch_xyz
master
Oto szczegółowo powyższe kroki -
Utwórz nowy oddział z
master
(gdzie przypadkowo popełniłem wiele zmian)Uwaga:
-b
flaga służy do utworzenia nowego oddziału.Aby zweryfikować, czy udało nam się to zrobić poprawnie, postaram się szybko
git branch
upewnić, że jesteśmy wtemp_branch_xyz
oddziale, igit log
sprawdzić, czy poprawnie wykonaliśmy zatwierdzenia.Scal gałąź tymczasową z gałęzią pierwotnie przeznaczoną dla zatwierdzeń, tj
branch_xyz
.Najpierw przejdź do oryginalnej gałęzi, tj.
branch_xyz
(Może być konieczne,git fetch
jeśli nie masz)Uwaga: Nie używamy
-b
flagiTeraz połączmy gałąź tymczasową z gałęzią, którą aktualnie realizujemy
branch_xyz
Być może będziesz musiał zająć się tutaj niektórymi konfliktami, jeśli są. Możesz pchnąć (chciałbym) lub przejść do następnych kroków, po udanym scaleniu.
Cofnij przypadkowe zatwierdzenia przy
master
użyciu tej odpowiedzi jako odniesienia, najpierw przełącz namaster
następnie cofnij to do końca, aby dopasować do pilota (lub konkretnego zatwierdzenia, jeśli chcesz)
Znowu zrobię to
git log
przed i po, aby upewnić się, że zamierzone zmiany weszły w życie.Kasowanie dowodów, czyli usuwanie gałęzi tymczasowej. W tym celu musisz najpierw sprawdzić gałąź, w której temp został scalony, tj.
branch_xyz
(Jeśli pozostanieszmaster
i wykonasz poniższe polecenie, możesz dostać aerror: The branch 'temp_branch_xyz' is not fully merged
), więca następnie usuń dowód tego nieszczęścia
Proszę bardzo.
źródło
Jeśli gałąź, do której chcesz zastosować zmiany, już istnieje ( na przykład gałąź rozwija ), postępuj zgodnie z instrukcjami dostarczonymi przez fotanus poniżej:
I oczywiście możesz użyć tempbranch lub innej nazwy oddziału zamiast my_feature jeśli chcesz.
Ponadto, jeśli ma to zastosowanie, opóźnij skasowanie popu (zastosuj), aż do momentu połączenia w oddziale docelowym.
źródło
Dla mnie zostało to rozwiązane przez cofnięcie zatwierdzenia, które nacisnąłem, a następnie wybranie wiśni, które zatwierdza do drugiej gałęzi.
Możesz użyć
git log
do znalezienia poprawnego skrótu i możesz wprowadzać te zmiany w dowolnym momencie!źródło