Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Git Merge und Merge-Konflikte lösen

Nach dieser Lektion: Ich kann zwei Branches zusammenführen und einen Konflikt erkennen.

Lektion, 60 Min.15 BefehleGit-und-Gitea-Lab: clone, commit und push auf einem eigenen Git-Server lernen

Was ist ein Merge-Konflikt in Git?

Ein Merge führt die Arbeit zweier Branches wieder zusammen. Ein Merge-Konflikt entsteht, wenn beide Branches dieselbe Zeile verschieden geändert haben und Git nicht wählen kann.

Im Lager eines Teeladens senkt eine Person den Preis für eine Aktion. Eine andere erhöht ihn am selben Tag wegen der Kosten. Beide Änderungen sind berechtigt, aber nur eine Zahl passt in die Zeile.

Am Ende dieser Lektion

Notiz

Ich kann zwei Branches zusammenführen und einen Konflikt erkennen.

Schlüsselbegriffe

BegriffWas er bedeutet
Mergedie Arbeit eines Branches in den aktuellen übernehmen
Fast-forwardein Merge, bei dem nur der Branchname vorrückt
Merge-Commitein Commit mit zwei Vorgängern
Konfliktdieselbe Zeile wurde auf beiden Seiten verschieden geändert
Konfliktmarkierungeine Zeile, die beide Fassungen in der Datei trennt

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Merge geht auf zwei Arten aus

Wenn main seit der Abzweigung kein neuer Commit erreicht hat, rückt der Name von main einfach vor. Das ist ein Fast-forward, es entsteht kein neuer Commit.

Haben beide Branches neue Commits, erzeugt Git einen Merge-Commit mit zwei Vorgängern. Ändern beide dieselbe Zeile, hält Git an und meldet einen Konflikt.

Drei Ausgänge eines Merges

Lage der BranchesWas Git tutNeuer Commit
Nur der andere Branch hat neue CommitsFast-forward: der Name rückt vorNein
Beide haben neue Commits, andere ZeilenMerge-Commit ohne HilfeJa
Beide änderten dieselbe ZeileKonflikt: Git hält an und fragtErst nach Ihrer Wahl

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Repository namens lager anlegen

Befehl
git init -b main lager

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ihren Namen für diesen Ordner setzen

Befehl
git -C lager config user.name "Studierende"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ihre Adresse für diesen Ordner setzen

Befehl
git -C lager config user.email "[email protected]"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Bestandsliste mit zwei Zeilen schreiben

Befehl
printf 'Tee 40\nKaffee 25\n' > lager/bestand.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Liste vormerken

Befehl
git -C lager add bestand.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den ersten Commit speichern

Befehl
git -C lager commit -m "Bestand angelegt"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zwei Seiten ändern dieselbe Zeile

Jetzt bauen Sie den Konflikt mit Absicht. Auf dem Branch aktion ersetzen Sie in der ersten Zeile die 40 durch 35. Zurück auf main ersetzen Sie dieselbe 40 durch 38. Beide Seiten speichern ihre Änderung als Commit.

Den Branch aktion anlegen und wechseln

Befehl
git -C lager switch -c aktion

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Auf aktion die Zahl auf 35 ändern

Befehl
sed -i 's/Tee 40/Tee 35/' lager/bestand.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Änderung auf aktion speichern

Befehl
git -C lager commit -am "Aktionspreis eintragen"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Zurück auf main wechseln

Befehl
git -C lager switch main

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Auf main dieselbe Zahl auf 38 ändern

Befehl
sed -i 's/Tee 40/Tee 38/' lager/bestand.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Änderung auf main speichern

Befehl
git -C lager commit -am "Kosten weitergeben"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Den Branch aktion in main einführen

Befehl
git -C lager merge aktion

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Lesen, was Git in die Datei schrieb

Befehl
cat lager/bestand.txt

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Drei Markierungszeilen zeigen beide Fassungen

Git schrieb beide Fassungen in die Datei. Die Zeile <<<<<<< HEAD beginnt die Fassung des Branches, auf dem Sie stehen. Die Zeile ======= trennt die Fassungen. Die Zeile >>>>>>> aktion beendet die andere.

Zum Lösen bearbeiten Sie die Datei zum gewünschten Text und löschen die drei Markierungszeilen. Dann folgen git add und git commit. Hier machen Sie den Merge stattdessen rückgängig.

Den Merge abbrechen

Befehl
git -C lager merge --abort

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Irrtum

Warnung

Viele glauben, ein Konflikt heiße, das Repository sei kaputt oder jemand habe einen Fehler gemacht. Er heißt nur, dass zwei Personen dieselbe Zeile änderten. Nichts ist verloren. Sie wählen den richtigen Text oder brechen den Merge mit git merge --abort ab.

Über dieses Lab und seinen Quellcode: Git-und-Gitea-Lab: clone, commit und push auf einem eigenen Git-Server lernen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.