git merge scala historię jednej lub kilku gałęzi do gałęzi, na której aktualnie stoisz. W praktyce robisz to po skończeniu pracy na feature branchu: przełączasz się na main i wciągasz tam swoje zmiany. Git domyślnie próbuje połączyć wszystko automatycznie, a gdy te same linie zmieniły się po obu stronach, zatrzymuje się i prosi Ciebie o rozstrzygnięcie konfliktu. To podstawowe narzędzie do łączenia równoległych wątków pracy w zespole.
Składnia i najważniejsze opcje
Podstawowa forma: git merge — wciąga wskazaną gałąź do bieżącej.
--no-ff— wymusza utworzenie commita scalającego nawet wtedy, gdy możliwe byłoby przewinięcie (fast-forward). Dzięki temu w historii zostaje ślad, że istniała osobna gałąź.--ff-only— pozwala scalić tylko wtedy, gdy da się przewinąć bez commita scalającego. Jeśli się nie da, merge zostaje przerwany bez zmian.--squash— bierze wszystkie zmiany z gałęzi i przygotowuje je jako jeden zestaw do zacommitowania, bez tworzenia commita scalającego i bez zapisu drugiego rodzica.--no-commit— wykonuje scalenie, ale zatrzymuje się tuż przed commitem, żebyś mógł zajrzeć w wynik.-m— ustawia treść commita scalającego z linii poleceń.--abort— przerywa trwający merge i przywraca stan sprzed jego rozpoczęcia (ratunek przy konfliktach).--continue— kończy merge po ręcznym rozwiązaniu konfliktów i zacommitowaniu plików.-X ours/-X theirs— przy konfliktach automatycznie wybiera odpowiednio Twoją lub przychodzącą wersję spornych fragmentów.
Przykłady użycia
git merge feature/login— scala gałąźfeature/logindo tej, na której stoisz.git merge --no-ff feature/login— łączy z wymuszonym commitem scalającym, czytelnie zaznaczając całą gałąź w historii.git merge --squash feature/eksperyment— spłaszcza wszystkie zmiany w jeden komplet; potem robiszgit commit, by je zatwierdzić jednym wpisem.git merge --abort— wycofuje zaplątany merge i wraca do punktu wyjścia.git merge -X theirs hotfix— scalahotfix, automatycznie przyjmując jego wersję przy konfliktach.
Częste błędy i pułapki
Najczęstszy błąd to merge na złej gałęzi — zawsze sprawdź git status, zanim wpiszesz polecenie. Pamiętaj, że scalasz do bieżącej gałęzi, nie odwrotnie. Druga pułapka to -X theirs: rozwiązuje tylko realne konflikty po swojemu i nie nadpisuje całych plików — to nie to samo co odrzucenie zmian. Jeśli merge utknie w konflikcie, nie panikuj: git merge --abort cofa wszystko bez śladu. Po ręcznym poprawieniu plików najpierw git add, a dopiero potem git merge --continue lub zwykły commit. Uważaj też na --squash — gubi informację o tym, że gałąź w ogóle istniała, więc kolejny merge tej samej gałęzi potrafi narobić bałaganu.
Powiązane komendy: git rebase, git pull, git switch, git diff, git log, git cherry-pick.