Merge w Git to operacja łączenia zmian z jednej gałęzi z drugą, najczęściej włączania gotowej funkcji do gałęzi głównej. Git porównuje obie linie historii, wyszukuje wspólnego przodka i łączy różnice, a gdy zmiany dotyczą tych samych linii, zgłasza konflikt do ręcznego rozwiązania.
Rodzaje scalania
Gdy gałąź główna nie zmieniła się od rozgałęzienia, Git może wykonać szybkie przewinięcie (fast-forward), przesuwając tylko wskaźnik. W przeciwnym razie tworzy specjalny commit scalający z dwoma rodzicami. Alternatywą jest git rebase, które przenosi commity na nowy punkt startowy i daje liniową historię, ale przepisuje ją, więc nie stosuje się go do gałęzi współdzielonych.
Rozwiązywanie konfliktów
Konflikt oznacza, że obie gałęzie zmieniły ten sam fragment pliku. Git oznacza go znacznikami <<<<<<<, ======= i >>>>>>>. Należy wybrać prawidłową wersję, usunąć znaczniki, dodać plik do poczekalni i dokończyć scalanie commitem.
Jak ograniczyć konflikty?
Pomagają krótko żyjące gałęzie, częste pobieranie zmian z gałęzi głównej i podział pracy tak, by osoby nie edytowały tych samych fragmentów. Dobrze działają też automatyczne testy uruchamiane przed scaleniem.
Zobacz w praktyce
Git w zespołowym web developmencie
Jak pisać zrozumiałe changelogi dla webdeveloperów?
Jak automatycznie sprawdzić szybkość i jakość kodu przed wdrożeniem?