0%

Zusammenführen und Konflikte

Einen Merge-Konflikt lesen

Ein Merge-Konflikt ist kein beschädigtes Repository. Es ist ein Merge, der an einer Entscheidung pausiert, die Git nicht zuverlässig selbst treffen kann. Das vorbereitete Repository pausiert gerade: main hat eine Solo-Stufe und Chat-Support hinzugefügt, während simplify-tiers auf denselben Zeilen zwei Preise erhöht hat.

Git fragen, wo der Merge angehalten hat

Du verwendest git status bereits, um den aktuellen Branch und ausstehende Dateiänderungen zu sehen. Während eines Merges meldet derselbe einfache Befehl außerdem, dass ein Merge läuft, und listet Pfade auf, die unmerged, also noch nicht zusammengeführt sind.

Führe ihn jetzt aus:

git status

Git nennt pricing.md unter Unmerged paths und sagt, dass beide Branches die Datei geändert haben. Die Meldung nennt dir außerdem die beiden sicheren nächsten Wege: die Datei korrigieren und bereitstellen oder den Merge abbrechen.

Die markierten Alternativen lesen

Öffne die Datei mit dem Konflikt im Terminaleditor aus Kapitel 2:

nano -w pricing.md

nano öffnet die Datei. -w verhindert, dass der Editor allein wegen eines schmalen Terminals feste Zeilenumbrüche einfügt. Speichere noch keine Änderung. Lies die drei Markierungszeilen, die Git hinzugefügt hat:

<<<<<<< HEAD
Solo: 12 per month
Standard: 20 per month
Team: 60 per month
Support: email, and chat on Team
=======
Standard: 25 per month
Team: 75 per month
Support: email only
>>>>>>> simplify-tiers

Die mit <<<<<<< beginnende Zeile eröffnet die Version des aktuellen Branchs. HEAD bezeichnet den Branch, auf dem du beim Beginn des Merges warst, hier also main. Die Zeile mit ======= trennt die Alternativen. Die mit >>>>>>> beginnende Zeile beendet die Version des anderen Branchs und nennt simplify-tiers.

Die Markierungen sind keine Dekoration. Sie stehen buchstäblich in der Datei. Solange eine Markierung übrig ist, ist die Datei also nicht aufgelöst. Verlasse nano ohne zu speichern: Drücke Ctrl-X und dann N, falls nach dem Speichern gefragt wird.

Der sichere Rückweg

Manchmal beginnst du einen Merge und merkst, dass dir noch Informationen für die Entscheidung fehlen. git merge --abort bricht den Merge-Versuch ab und versucht, den Zustand vor dem Merge wiederherzustellen. Dieser vorbereitete Merge begann mit einem sauberen Arbeitsbaum. Ein Abbruch stellt deshalb diesen sauberen Zustand wieder her. Beginnst du einen Merge mit nicht committeten Bearbeitungen, kann deren Wiederherstellung schwierig werden, besonders wenn du sie während des Merges weiter veränderst. Deshalb prüfst und klärst du deine Arbeit vor dem Zusammenführen. Die Option --abort bedeutet, diesen laufenden Merge zu stoppen, statt etwas anzulegen oder zusammenzuführen.

Übe diesen Rückweg jetzt:

git merge --abort
git status

Der erste Befehl entfernt den laufenden Merge-Zustand und die Konfliktmarkierungen. Der zweite bestätigt, dass main wieder sauber ist. Die Commits beider Branches wurden nicht gelöscht. simplify-tiers wartet weiterhin darauf, dass du es erneut versuchst.

Lass das Repository in diesem geklärten Zustand. Du hast jetzt einen der beiden Ausgänge aus einem pausierten Merge kennengelernt. Den anderen kannst du jederzeit erreichen, denn zum erneuten Starten dient dasselbe git merge simplify-tiers, das du in Lektion 1 gelesen hast.

Was stellt in einer Datei mit Konflikt der Text zwischen <<<<<<< HEAD und ======= dar?

Was tut git merge --abort während eines Konflikts?

Du hast jetzt einen Konflikt kennengelernt, ohne ihn lösen zu müssen. Das ist die richtige Reihenfolge: Der Zustand wirkt viel weniger bedrohlich, wenn du weißt, dass es an beiden Enden einen Ausgang gibt. Bevor du durch den anderen gehst, gibt dir die nächste Lektion die Erfahrung, die dieses Kapitel bisher nur beschrieben hat: einen Merge, der einfach funktioniert.