Więc popełniłem całkiem duży błąd. Zrobiłem zatwierdzenie, wyciągnąłem, scaliłem (ale pomieszałem kod, robiąc to), a następnie wypchnąłem. Chciałbym powtórzyć to scalenie i poprawić kod. Czy jest na to sposób?
Tylko uwaga - w rzeczywistości jest to temat na SO i nie powinien był być migrowany. Spróbuj kiedyś przeczytać własne strony pomocy i zwróć uwagę na narzędzia programowe powszechnie używane przez linię programistów . To powiedziawszy, jest tu również temat - SwiftCore, nie przejmuj się, że został migrowany, to nie była twoja wina.
Bob
Odpowiedzi:
13
Nie jestem pewien, czy jest to „błogosławiony” sposób, aby to zrobić, ale oto, co zrobiłem, aby rozwiązać ten sam problem bez konieczności „forsowania” lub czegoś w tym rodzaju rażącego.
Załóżmy, że twoja historia wygląda mniej więcej tak (a M to flubbed merge):
-A--B--C--M (master points here)
\ /
D----E
Uruchomienie git checkout -b merge_fix <commit ID E>tworzy gałąź, zanim popełnimy jakiekolwiek błędy:
-A--B--C--M (master points here)
\ /
D----E (HEAD and merge_fix point here)
Teraz zróbmy ponownie scalenie w naszym nowym oddziale. Nie możemy się po prostu scalić master, więc musimy ręcznie wybrać zatwierdzenie przed naszym złym scaleniem: git merge <commit ID C>Nie popełniaj tych samych błędów, które popełniłeś ostatnim razem!
-A--B--C--M (master points here)
\ X
D----E-G (HEAD and merge_fix point here)
Zakładając, że zatwierdzenie Gwygląda dobrze, teraz chcemy zsynchronizować się z wierzchołkiem mastergałęzi. To polecenie mówi gitowi, aby zignorował zmiany wprowadzone w celu opanowania i zmusił nasze zmiany, aby stały się wynikiem scalenia:git merge -s ours master
-A--B--C--M (master points here)
\ X \
D----E-G--H (HEAD and merge_fix point here)
Wreszcie (ponownie zakładając, że zatwierdzanie Hwygląda dobrze, chcemy przewinąć do przodu, masteraby uwzględnić nasze stałe scalanie:
git checkout master
git merge merge_fix
To tak naprawdę przesuwa masterwskaźnik gałęzi H, ale skorzystam z okazji, aby trochę wyczyścić moją grafikę ASCII:
-A--B--C--M--H (HEAD, master, and merge_fix all point here)
\ X /
D----E--G
I masz to! pomyślnie wykonałeś scalenie bez unieważniania historii!
Pamiętaj tylko, że git push --forceprzepisze wszystko, co miałeś w zdalnym oddziale, a inne osoby korzystające z tego oddziału również mogą mieć na to wpływ. (Zwykle nie powinieneś tego robić.)
Chociaż może to odpowiedzieć na pytanie OP, odpowiedzi tylko na link nie są dobrze akceptowane w SO. Możesz jednak podać w odpowiedzi najistotniejsze fragmenty linku.
Chociaż ten link może odpowiedzieć na pytanie, lepiej dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
Odpowiedzi:
Nie jestem pewien, czy jest to „błogosławiony” sposób, aby to zrobić, ale oto, co zrobiłem, aby rozwiązać ten sam problem bez konieczności „forsowania” lub czegoś w tym rodzaju rażącego.
Załóżmy, że twoja historia wygląda mniej więcej tak (a M to flubbed merge):
Uruchomienie
git checkout -b merge_fix <commit ID E>
tworzy gałąź, zanim popełnimy jakiekolwiek błędy:Teraz zróbmy ponownie scalenie w naszym nowym oddziale. Nie możemy się po prostu scalić
master
, więc musimy ręcznie wybrać zatwierdzenie przed naszym złym scaleniem:git merge <commit ID C>
Nie popełniaj tych samych błędów, które popełniłeś ostatnim razem!Zakładając, że zatwierdzenie
G
wygląda dobrze, teraz chcemy zsynchronizować się z wierzchołkiemmaster
gałęzi. To polecenie mówi gitowi, aby zignorował zmiany wprowadzone w celu opanowania i zmusił nasze zmiany, aby stały się wynikiem scalenia:git merge -s ours master
Wreszcie (ponownie zakładając, że zatwierdzanie
H
wygląda dobrze, chcemy przewinąć do przodu,master
aby uwzględnić nasze stałe scalanie:To tak naprawdę przesuwa
master
wskaźnik gałęziH
, ale skorzystam z okazji, aby trochę wyczyścić moją grafikę ASCII:I masz to! pomyślnie wykonałeś scalenie bez unieważniania historii!
źródło
Możesz to zrobić w następujący sposób:
To jest:
Pamiętaj tylko, że
git push --force
przepisze wszystko, co miałeś w zdalnym oddziale, a inne osoby korzystające z tego oddziału również mogą mieć na to wpływ. (Zwykle nie powinieneś tego robić.)źródło
git push --force
nie jest bezpiecznegit merge --abort
i wtedy możesz ponownie połączyćźródło
Sprawdź tę nadzieję, że jest dla Ciebie przydatna
źródło