6

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ć?

Odpowiedz

3

Znajdź hash popełnienie: git log --pretty=format:"%h %s" | grep "Commit to the hotfix"

przywrócić "Uh oh" popełnić: git revert 15d2e1f -m 2

+0

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". –

+0

Zmodyfikowana wersja działała jak czar. –