Rozwiązywanie konfliktów scalania w Git: krok po kroku

Git to świetne narzędzie do zarządzania wersjami kodu, ale przy pracy w większych zespołach często zdarza się, że podczas łączenia zmian dochodzi do konfliktów. Konflikty w Gicie oznaczają, że Git nie potrafi automatycznie połączyć dwóch wersji pliku i wymaga ręcznej interwencji. W tym artykule pokażemy, dlaczego powstają konflikty, jak je rozwiązywać i jak im zapobiegać.

Co to jest konflikt podczas merge i dlaczego powstaje?

Konflikt w Gicie występuje, gdy dwie różne gałęzie zawierają zmiany w tym samym pliku i w tym samym wierszu. Git nie może zdecydować, która wersja jest poprawna, i wymaga ręcznego rozwiązania.

Najczęstsze przyczyny konfliktów:

Jak rozwiązać konflikt podczas mergowania w Gicie?

1. Uruchomienie polecenia merge

Jeśli spróbujesz połączyć gałąź za pomocą polecenia:

git merge feature-branch

Git może wyświetlić komunikat o błędzie:

CONFLICT (content): Merge conflict in plik.txt

To oznacza, że w pliku plik.txt wystąpił konflikt.

2. Wyświetlenie plików z konfliktem

Aby zobaczyć listę plików z konfliktami, użyj polecenia:

git status

Wynik może wyglądać tak:

both modified: plik.txt

3. Otwarcie pliku i rozwiązanie konfliktu

W problematycznym pliku Git oznaczy konflikty w następujący sposób:

<<<<<<< HEAD
To jest Twoja aktualna wersja kodu.
=======
To jest wersja z feature-branch.
>>>>>>> feature-branch

Twoim zadaniem jest wybrać poprawną wersję lub ręcznie je połączyć:

To jest poprawna wersja kodu po rozwiązaniu konfliktu.

4. Zapisanie zmian i zakończenie merge

Po rozwiązaniu konfliktów dodaj plik do Gita:

git add plik.txt

Następnie zakończ merge poleceniem:

git commit -m "Rozwiązanie konfliktu podczas merge"

5. Sprawdzenie poprawności merge

Sprawdź status repozytorium:

git status

Jeśli Git nie zgłasza już żadnych konfliktów, merge zakończył się sukcesem.

Jak zapobiegać konfliktom w Gicie?

Konflikty w Gicie są powszechne, ale można je zminimalizować:

Najczęściej zadawane pytania

1. Co zrobić, jeśli popełnię błąd podczas rozwiązywania konfliktu?

Jeśli chcesz cofnąć rozwiązanie konfliktu i wrócić do poprzedniego stanu, użyj:

git merge --abort

2. Jak rozwiązać konflikt za pomocą rebase?

git rebase main

Podczas rebase Git może poprosić o ręczne rozwiązanie konfliktów, podobnie jak przy merge.

3. Czy można ustawić Git tak, aby konflikty były rozwiązywane automatycznie?

W niektórych przypadkach możesz użyć:

git merge -X ours feature-branch

lub

git merge -X theirs feature-branch

Te polecenia wybiorą określoną wersję kodu bez ręcznej interwencji.

Top 5 ciekawostek o konfliktach w Gicie

  1. Najczęstsze konflikty występują podczas łączenia gałęzi zawierających zmiany w tym samym pliku.
  2. Git nie pozwala na merge, jeśli istnieją niezapisane zmiany – najpierw należy użyć git stash lub commit.
  3. Nowoczesne zespoły developerskie często korzystają z pull requestów, które pomagają minimalizować konflikty.
  4. Istnieją narzędzia do wizualnego rozwiązywania konfliktów, takie jak VS Code, P4Merge czy KDiff3.
  5. Najlepszym sposobem na unikanie konfliktów jest komunikacja w zespole i odpowiednie zarządzanie gałęziami.

Chcesz nauczyć się programować?

Jeśli interesuje Cię szkolenie programistyczne stacjonarne lub online, sprawdź naszą ofertę na stronie www.like-it.sk. Nasze kursy prowadzone są przez doświadczonych ekspertów, którzy nauczą Cię programowania od podstaw po zaawansowane techniki.

Marián Knězek