git merge

Scala zmiany z jednej gałęzi do bieżącej.

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/login do 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 robisz git commit, by je zatwierdzić jednym wpisem.
  • git merge --abort — wycofuje zaplątany merge i wraca do punktu wyjścia.
  • git merge -X theirs hotfix — scala hotfix, 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.