2013-06-11 21 views
7

Mam taką sytuację: pracy na niektórych testBranch od pewnego czasu i chciałem zsynchronizować z pana tak zrobiłem git testBranch kasa i git merge master/testBranchCofnij git przodu scalić

Więc teraz mój oddział jest zsynchronizowany z master, ale potem dowiedziałem się, że chcę cofnąć to scalenie i problem polega na tym, że scalanie odbywa się z szybkim forwardowaniem, a teraz moja historia commitów jest mieszana z master commits i testBranch popełnia błędy i nie wiem jak powrócić do stanu przed scaleniem na mojej testowej gałęzi.

Dzięki za wszelką pomoc

+0

Czy zatwierdzenia zostały połączone z 'master/testBranch' znajdującym się * na końcówce * twojego' testBranch' lub czy udało Ci się nagrać kilka własnych lokalnych zatwierdzeń na podstawie tego, co zostało scalone? Droga do odzyskania w dużej mierze zależy od tego. – kostix

Odpowiedz

4

Jeśli znasz rewizji, w którym chcesz się z lokalnym testBranch, to jest tak proste, jak:

git checkout testBranch 
git reset --hard <revision> 

Jeśli masz zmiany mieszane w niczym (najstarsze na górze):

<point> 
<your_change_a> 
<change_from_someone_else> 
<your_change_b> 
<testBranch> 

Mogłabyś:

git checkout testBranch 
git reset --hard <point> 
git cherry-pick <your_change_a> 
git cherry-pick <your_change_b> 
+1

To powinno zadziałać. Polecam również użycie przeglądarki graficznej Git, takiej jak gitg lub gitk, aby uzyskać dobry przegląd zmian, które chcesz cofnąć. – RyPeck

+1

Dziękuję za odpowiedź, ale znalazłem inne rozwiązanie (nie próbowałem twojego, ale przypuszczam, że działa). Rozwiązanie znajduje się na tym blogu: http://blog.tplus1.com/blog/2011/09/23/undo-a-fast-forward-git-merge/ ... mam nadzieję, że pomoże komuś innemu :) . –

16

git reflog show testBranch

powinien pokazać połączenie Fast-forward jako ostatni element ({0}). Po upewnieniu się, jest to przypadek, zamówienie testBranch a potem po prostu zrobić

git reset --keep [email protected]{1}

, aby powrócić do poprzedniego stanu.

+0

To jest dobra odpowiedź. Dodam, że ważne jest, aby upewnić się, że testBranch się zakończy przed uruchomieniem 'git reset' – jbll

+0

Łatwe do zrozumienia i miłe podejście! To powinno być oznaczone jako odpowiedź – anthonymonori