Git Merge
Ostatnia aktualizacja
git merge przenosi commity z innej gałęzi do bieżącej. Gdy bieżąca gałąź się nie rozeszła, Git robi fast-forward, czyli po prostu przesuwa wskaźnik do przodu. Gdy obie gałęzie mają nowe commity, Git tworzy commit scalający, który łączy obie historie. W przeciwieństwie do rebase merge zachowuje dokładną historię obu gałęzi.
Wypróbuj te polecenia w terminalu online: prawdziwa powłoka w przeglądarce, bez żadnej instalacji.
Składnia
| Polecenie | Co robi |
|---|---|
git merge feature | Scala feature z bieżącą gałęzią |
git merge --no-ff feature | Zawsze tworzy commit scalający |
git merge --ff-only feature | Scala tylko, jeśli możliwy jest fast-forward |
git merge --squash feature | Łączy commity gałęzi w jeden |
git merge --abort | Anuluje scalanie z konfliktami |
Fast-forward vs commit scalający
| Scenariusz | Fast-forward | Commit scalający (--no-ff) |
|---|---|---|
| Tworzy nowy commit | Nie | Tak |
| Zostawia ślad gałęzi | Nie | Tak |
| Występuje, gdy | Bieżąca gałąź się nie rozeszła | Obie gałęzie mają nowe commity |
Rozwiązywanie konfliktu scalania
Gdy obie gałęzie zmieniły te same linie, Git się zatrzymuje.
| Krok | Polecenie | Wynik |
|---|---|---|
| 1 | Edytuj pliki z konfliktami | Wybierz właściwe linie, usuń znaczniki |
| 2 | git add <file> | Oznacza konflikt jako rozwiązany |
| 3 | git commit | Kończy scalanie |
Najczęstsze pytania o git merge
Jak scalić jedną gałąź z drugą w Git?
Przełącz się na gałąź, do której chcesz scalić (np.
git switch main), a potem uruchom git merge feature. Git łączy commity z feature z main przez fast-forward albo, jeśli obie gałęzie się rozeszły, tworząc commit scalający.Czym różni się fast-forward od commita scalającego?
Fast-forward następuje, gdy twoja bieżąca gałąź nie przesunęła się od chwili, gdy druga gałąź się od niej odgałęziła: Git po prostu przesuwa wskaźnik do przodu, bez nowego commita. Commit scalający powstaje, gdy obie gałęzie mają nowe commity, i łączy ich historie. Użyj
--no-ff, żeby zawsze tworzyć commit scalający, albo --ff-only, żeby wymagać fast-forward.Jak rozwiązać konflikt scalania?
Przy konflikcie Git oznacza kolidujące fragmenty w plikach znacznikami
<<<<<<<, ======= i >>>>>>>. Edytuj każdy plik tak, żeby zostawić właściwą treść, i usuń znaczniki, potem dodaj rozwiązane pliki przez git add i zakończ scalanie przez git commit.Jak cofnąć albo przerwać scalanie?
Jeśli scalanie wciąż trwa (konflikty nie są rozwiązane), uruchom git merge --abort, żeby je anulować i przywrócić stan sprzed merge. Jeśli scalanie zakończyło się lokalnie,
git reset --hard ORIG_HEAD przywraca gałąź do pozycji sprzed merge (w przeciwieństwie do HEAD~1 działa poprawnie także po fast-forward, ale usuwa niezatwierdzoną pracę). Jeśli merge jest już wypchnięty, użyj git revert -m 1 <merge-hash>.Czy mogę to przećwiczyć online?
Tak. Otwórz terminal online i uruchom
git merge w prawdziwej powłoce w przeglądarce, bez żadnej instalacji. Darmowy interaktywny kurs Git w Coddy też krok po kroku omawia scalanie i rozwiązywanie konfliktów.