W poprzednim rozdziale opisaliśmy dwie strategie mergowania kodu. Zaznaczyliśmy przy tym, że często spotykaną sytuacją jest
wrzucanie przez programistę kodu do brancha, np.
master, już po tym jak na jego podstawie stworzyliśmy nowego brancha, np.
feature/Add-user-management-skeleton.
Wtedy, w momencie mergowania zmian do brancha
master, zostaje uruchomiona strategia
recursive merge.
Odrzucenie push-a
Musimy jednak pamiętać, że najpierw pracujemy na lokalnym repozytorium, więc jeśli kolejność wydarzeń była taka:
-
stworzenie lokalnego brancha feature/Add-user-management-skeleton na podstawie lokalnego brancha master
-
wrzucenie kodu na zdalnego brancha master przez innego programistę, wykonane w trakcie naszej pracy na lokalnym branchu
feature/Add-user-management-skeleton
-
zmergowanie zmian z naszego lokalnego brancha feature/Add-user-management-skeleton do lokalnego brancha master
wówczas nie nastąpi
recursive merge, a wykonany zostanie
fast forward. Stanie się tak dlatego, że na nasz lokalny branch
master
nic nie wie o tym, że jego zdalny odpowiednik został w międzyczasie zmieniony. Realizacja takiego scenariusza zakończy się tym, że w momencie
wypychania zmian do zdalnego
master-a spotkamy się z odrzuceniem tej operacji.
Innymi słowy, wykonując komendę
push otrzymamy komunikat zwrotny:
Aktualizacja brancha
Po otrzymaniu powyższego błędu musimy wykonać operację "naprawczą", polegającą na zaktualizowaniu lokalnego brancha
master
zmianami ze zdalnego odpowiednika:
Pamiętajmy, że komenda
pull tak naprawde wywołuje najpierw komendę
fetch, a następnie
merge co powoduje,
że dane z zewnętrznego
master-a są pobierane oraz mergowane do lokalnego brancha
master, czyli tego do którego wcześniej już zmergowaliśmy swojego brancha
feature/Add-user-management-skeleton. Wykona się tu więc
recursive merge, tyle że inicjatorem tego procesu nie będą nasze zmiany, a zmiany przychodzące z zewnętrznego
master-a.
Reasumując, wykonanie komendy
pull spowoduje zaktualizowanie kodu w naszym repozytorium, a wtedy będzie już możliwe wykonanie komendy wrzucającej:
W tym momencie zmiany zostaną wgrane na zdalnego
master-a już bez żadnego problemu.