Wyobraź sobie, że dzieje się tak (i że wszyscy używamy SourceTree):
- Wszyscy pracujemy nad pochodzeniem / rozwojem.
- Wyjeżdżam na tydzień na wakacje.
- Mój współpracownik od kilku dni pracuje lokalnie, nie łącząc źródła / rozwoju z powrotem z lokalnym oddziałem deweloperskim.
- Próbuje wykonać push, zostaje poinformowany, że najpierw musi się połączyć, a następnie wykonuje pull.
- Dostaje konflikt, uniemożliwiając kontynuowanie automatycznego zatwierdzania po scaleniu.
- Zakładając, że Git jest jak SVN, mój współpracownik odrzuca „nowe” pliki w swojej kopii roboczej, a następnie dokonuje scalenia - usuwając te „nowe” pliki z głowy źródła / develop.
- Po tej rewizji trwa tygodniowa praca deweloperów.
- Wracam z wakacji i dowiaduję się, że brakuje kilku dni mojej pracy.
Wszyscy jesteśmy bardzo nowi w Git (jest to nasz pierwszy projekt, w którym go używamy), ale zrobiłem to, aby to naprawić:
- Zmień nazwę „develop” na „develop_old”.
- Scal develop_old w nowy oddział „develop_new”.
- Zresetuj gałąź develop_new do ostatniego zatwierdzenia przed złym scaleniem.
- Cherry wybiera odtąd każde zatwierdzenie, jeden po drugim, ręcznie rozwiązując konflikty.
- Wciśnij develop_old i develop_new do źródła.
W tym momencie develop_new jest, mam nadzieję, „dobrą” kopią wszystkich naszych zmian, które zostały ponownie zastosowane w kolejnych tygodniach. Zakładam również, że „odwrotne zatwierdzanie” będzie działało dziwnie podczas scalania, zwłaszcza że na nim opiera się praca na kilka następnych tygodni - a ponieważ scalanie zawiera wiele rzeczy, których chcemy, wraz z rzeczami, których nie robimy ” t.
Mam nadzieję, że to się nigdy więcej nie powtórzy, ale jeśli to się powtórzy, chciałbym wiedzieć o łatwiejszym / lepszym sposobie naprawiania rzeczy. Czy istnieje lepszy sposób na cofnięcie „złego” scalenia, gdy w repozytorium opartym na tym scaleniu wykonano wiele pracy?
git logformatu z odpowiednimi adnotacjami o tym, co wydarzyło się przy różnych zatwierdzeniach? (Zredagowałem / dodałem adnotacjęgit log --graph --pretty=oneline --abbrev-commiti stamtąd stamtąd)