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.
Przeczytaj także

Jak szybko przenieść zmiany do nowego brancha GIT?
Sposób jest tak samo szybki co trywialny. Polecenie jest być może znane wielu programistom, jednak nie jest ono zbyt popularne. Służy do przełączania się między branch’ami, podobnie jak git checkout.

Jak dodać branch bez historii?
Tworząc i wersjonując projekty czasem potrzebujemy poprowadzić daną gałąź (branch) bez historii branch’a źródłowego. Jest to pomocne w przypadku, gdy chcemy wydzielić jakiś moduł, który następnie przeniesiemy do innego projektu. Zatem przejdźmy do szybkiego przedstawienia operacji tworzenia branch’a bez historii.

Jak usunąć branch z GITa?
Korzystając z narzędzia do wersjonowania kodu w projektach (zwłaszcza w dużych), przychodzi taki moment, że mamy sporo archaicznych/nieużywanych/niepotrzebnych gałęzi (branchy). W takim przypadku z pomocą przychodzi nam opcja usunięcia brancha, czy to lokalnego, czy zdalnego. Zatem przejdźmy do prostej, szybkiej operacji usuwania brancha.