Deweloperzy tworzą branch’e do pracy z kopią kodu bez modyfikowania istniejącej, produkcyjnej wersji. Tworzysz gałęzie, aby wyizolować zmiany w kodzie, które testujesz przed scaleniem z główną gałęzią. Zatem dowiedzmy się jak działa mechanizm git merge
.
Wstęp
Załóżmy, że tworzysz stronę w zespole kilkuosobowym i pracujecie w obrębie jednego repozytorium. Nie trzeba chyba tłumaczyć, iż commit’y powinny być zwięzłe, dobrze opisane oraz częste. To zapewni aktualność kodu, ale także ograniczy potencjalną szansę na wystąpienie dużej ilości konfliktów. Tworzenie i usuwanie branch’y już opisywałem, zapraszam.
git merge

Po zakończeniu prac nad swoimi zmianami nadszedł czas, aby połączyć go z głównym branch’em. Scalanie przenosi zmiany w Twojej gałęzi i wprowadza je do głównej gałęzi.
Najprościej wytłumaczyć to w ten sposób:
- commit’ujemy zmiany na nasz branch do repozytorium zdalnego (nazwijmy go roboczo
feature
), - przełączamy się na branch
master
, - pobieramy zmiany z repozytorium zdalnego,
- łączymy zmiany z naszym branchem.
$ git merge feature
W idealnym przypadku zmiany zostaną połączone i będzie można wypchnąć wszystko do repozytorium zdalnego.
Są konflikty?
Często zdarza się tak, że w tzw. międzyczasie ktoś dodał do repozytorium zmiany, które kolidują z naszymi zmianami. W takim przypadku podczas git merge
wystąpią u nas konflikty.
$ git merge feature
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
W takiej sytuacji otwieramy wskazany plik, w którym wystąpiły konflikty i odszukujemy następujących linii:
<<<<<<< HEAD
// zmiany z zewnątrz
=======
// nasze zmiany
>>>>>>> feature
To moment, w którym musimy rozwiązać konflikty. Duża ilość konfliktów możliwe, że będzie wymagała konsultacji z autorem zmian, jednak na ogół przy niewielkich zmianach będziemy w stanie poradzić sobie sami. Należy porównać te zmiany i zastąpić powyższą konstrukcję poprawnym, połączonym kodem.
Po rozwiązaniu wszystkich konfliktów możemy spokojnie „zacommitować” rozwiązane konflikty:
$ git commit -m "merged and resolved the conflict in index.html"
$ git push origin master
Jak cofnąć git merge?
Może się także zdarzyć, że będziemy potrzebować całkowicie cofnąć efekt komendy git merge. W takim przypadku przyda się polecenie:
$ git merge --abort
Wykonanie tego polecenia z flagą --abort
spowoduje wyjście z procesu scalania i przywrócenie gałęzi do stanu sprzed scalenia.