Niedawno popełniłem błąd przy mojej strategii git merge i nie zauważyłem błędów wyniku, dopóki nie kontynuowałem pracy nad projektem i nie wprowadziłem więcej poprawek. Dla uproszczenia załóżmy, że mam dwie gałęzie: hotfix
i new_feature
. Zrobiłem coś jak następuje:Git: Wyciągnął zły oddział, a następnie pchnął scalenie. Jak cofnąć?
git checkout new_feature
git commit -m "Commit to the feature branch"
git checkout hotfix
git pull origin new_feature # Uh oh, I pulled the wrong branch!
git commit -m "Commit to the hotfix"
git push origin hotfix # Uh Oh, pushed the bad merge!
Po powyższych zdarzeń, inni deweloperzy również zobowiązuje się do oddziału poprawki. Teraz mamy poprawkę, którą chcemy wypchnąć, ale nie możemy, ponieważ zawiera ona funkcję, która nie jest kompletna.
Widziałem wiele podobnych pytań na temat tej sytuacji, ale żadna z nich nie pasuje do 100% (większość z nich polega na cofnięciu zatwierdzenia bezpośrednio po złym pociągnięciu, bez uprzedniego popychania.). Poszedłem o krok dalej i naprawdę borked rzeczy
Wszelkie krok po kroku, w jaki sposób mogę rozwiązać ten
Dzięki
Edycja:.?! wiele innych odpowiedzi wspomnieć git reflog
, więc tutaj jest zmodyfikowaną kopię kopalni Zmieniono nazwy skrótów i nazw gałęzi, aby pasowały do mojego przykładu ab ove.
aaaaaaa [email protected]{0}: checkout: moving from new_feature to hotfix
bbbbbbb [email protected]{1}: checkout: moving from hotfix to new_feature
aaaaaaa [email protected]{2}: commit: Added analytics tracking
ccccccc [email protected]{3}: commit (merge): Fixed a merge issue in compiled css # BAD MERGE?
ddddddd [email protected]{4}: checkout: moving from new_feature to hotfix
eeeeeee [email protected]{5}: commit: Finished updating the events for the header
ddddddd [email protected]{6}: checkout: moving from hotfix to new_feature
ddddddd [email protected]{7}: checkout: moving from new_feature to hotfix
W powyższym reflogu, [email protected]{3}
wygląda na złe połączenie. Byłem w gałęzi hotfix
i wciągnąłem gałąź new_feature
, która spowodowała konflikty podczas scalania. Naprawiłem je i pchnąłem. Co powinienem zrobić, żeby to naprawić?
Ale jest nie tylko jednym popełnić. Akceptacja "Uh Oh" była połączeniem z innej gałęzi, która zawierała kilka commitów! Musiałbym przejrzeć historię Hotfix i przywrócić kilka commits, co wydaje się trochę "hacky". –
Zmodyfikowana wersja działała jak czar. –