Jeśli nie widzisz żadnej różnicy, podejrzewam, że utraciłeś swoje zmiany. Możesz prawdopodobnie użyć git reflog
, aby zidentyfikować gałąź, która istniała przed bazą, i użyć git reset --hard <my-branch-tip-before-rebase>
, aby odzyskać oryginalną gałąź. I tak, będziesz musiał ponownie przeprowadzić ten proces. . :-(
Nie jestem pewien, jak skończył z nich poszukuje samo chociaż spodziewałem się zobaczyć następujące poleceniem dałeś:
1 = 2 = 3 = 4 (master)
\ \
\ 5' = 6' = 8' (my_branch)
\
5 = 6 = 7
W tym przypadku, prawdopodobnie powinien używałem rebase --onto
:
git rebase --onto master <commit id for 6> my_branch
że zostawiłaby cię z wykresem, który wyglądał tak:
1 = 2 = 3 = 4 (master)
\ \
\ 8' (my_branch)
\
5 = 6 = 7
Jeśli chodzi o utratę zmian, trzeba trochę praktyki, aby poradzić sobie z konfliktami seryjnymi, zwłaszcza gdy masz kilka dużych bloków, które wyglądają niemal identycznie. Zawsze uciekam się do spojrzenia na faktyczną różnicę wprowadzoną przez zatwierdzenie i próbę złagodzenia tej zmiany i scalenia jej z tym, co już jest w branży w odpowiedni sposób. Mogę łatwo zobaczyć, w jaki sposób twoja zmiana mogła się tam zagubić.
Jedna rzecz do zapamiętania. Jeśli nie spodziewasz się wielu konfliktów scalających - ponieważ nie uważasz, że źródła są wystarczająco zróżnicowane, widzący jest ostrzeżeniem, że robi coś złego. Dobrze jest wykonać kopię zapasową, wykonując git rebase --abort
, sprawdzając gałęzie i sprawdzając ponownie, jeśli spodziewasz się konfliktu. Upewnij się, że zauważyłeś, gdzie doszło do konfliktu (zwykle jest "Stosowanie ..." tuż przed ponownym uruchomieniem bazy danych w linii poleceń). To zwykle świetne miejsce na rozpoczęcie.
Czasami konflikty są nieuniknione i pracochłonne. Ale podejrzewam, że po treningu mniej natrafisz na ten problem.
Aby uzyskać więcej informacji na temat przesadzania zmian między oddziałami, spójrz na stronę podręcznika: git rebase. Wyszukaj "rebase --onto". Pierwsze trafienie powinno wylądować w sekcji mówiącej o przeniesieniu zmian do innej gałęzi.
Kiedy zrobiłeś 'git rebase --skip' (zamiast' --continue') czy możliwe jest "pominięcie" zmiany, która wciąż miała znaczące zmiany w trakcie reorganizacji? –
Zobacz tę odpowiedź: http://stackoverflow.com/a/4851776/450609.Musiałem użyć git rebase --skip, aby pominąć zmianę, którą właśnie ręcznie scaliłem. – dave
Po ręcznym scaleniu zwykle chcesz "--continue". Musisz tylko pominąć, jeśli wynikiem scalenia jest "brak zmiany". Z ilu zmian zrezygnowałeś i ile faktycznie złożyłeś? –