Files

2.8 KiB
Raw Permalink Blame History

Modul 04 Merge & Konflikte

Beim Mergen bringt Git Änderungen aus verschiedenen Branches zusammen. Das klappt meistens automatisch aber manchmal muss du eingreifen.


Fast-Forward-Merge

Ein Fast-Forward-Merge ist der einfachste Fall: main hat sich nicht verändert, während du auf deinem Feature-Branch gearbeitet hast. Git „spult" main einfach vorwärts.

gitGraph
    commit id: "A"
    commit id: "B"
    branch feature/schnell
    checkout feature/schnell
    commit id: "C"
    commit id: "D"
    checkout main
    merge feature/schnell id: "Fast-Forward"

Kein echter Merge-Commit entsteht main zeigt einfach auf D.


3-Way-Merge

Ein 3-Way-Merge passiert, wenn beide Branches seit dem letzten gemeinsamen Commit neue Commits haben. Git vergleicht den gemeinsamen Vorfahren mit beiden Spitzen und kombiniert die Änderungen.

gitGraph
    commit id: "Basis"
    commit id: "A"
    branch feature/konflikt
    checkout feature/konflikt
    commit id: "F1  auf feature"
    checkout main
    commit id: "M1  auf main"
    merge feature/konflikt id: "Merge Commit"

Git erstellt dabei einen Merge-Commit mit zwei Eltern-Commits.


Wenn ein Konflikt entsteht

Ein Konflikt tritt auf, wenn beide Branches dieselbe Zeile einer Datei unterschiedlich geändert haben. Git weiß nicht, welche Version "richtig" ist du musst entscheiden.

git merge feature/konflikt
Auto-merging konflikt-vorlage.txt
CONFLICT (content): Merge conflict in konflikt-vorlage.txt
Automatic merge failed; fix conflicts and then commit the result.

Konfliktmarker verstehen

Git markiert den betroffenen Bereich in der Datei so:

<<<<<<< HEAD
Diese Zeile stammt vom main-Branch.
=======
Diese Zeile stammt vom feature-Branch.
>>>>>>> feature/konflikt
Marker Bedeutung
<<<<<<< HEAD Beginn des Konfliktbereichs deine aktuelle Version (main)
======= Trennlinie zwischen den beiden Versionen
>>>>>>> feature/konflikt Ende des Konfliktbereichs die eingehende Version

Konflikt auflösen

  1. Öffne die Datei in einem Texteditor
  2. Entscheide, welche Version du behalten willst (oder kombiniere beide)
  3. Entferne alle Konfliktmarker (<<<<<<<, =======, >>>>>>>)
  4. Stage die Datei und committe:
git add konflikt-vorlage.txt
git commit -m "fix: Merge-Konflikt aufgelöst"

Notausgang: Merge abbrechen

Wenn du den Überblick verlierst und von vorn anfangen willst:

git merge --abort

Das setzt alles auf den Zustand vor dem Merge-Versuch zurück.


📝 Jetzt bist du dran!

Weiter zur Aufgabe.


Weiter geht's mit: 05 Remote & Pull Requests