GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So lösen Sie Merge-Konflikte in Git

Einführung

Der git merge Der Befehl hilft einem Mitwirkenden beim Hinzufügen zu einem Projekt aus einer Verzweigung. Das Konzept ist eine der Kernideen der kollaborativen Programmierung, die es mehreren Personen ermöglicht, ohne Konflikte an ihrem Teil des Codes zu arbeiten.

Wenn mehrere Mitwirkende an demselben Teil eines Codes oder mit zahlreichen Verzweigungen arbeiten, kommt es zwangsläufig zu Zusammenführungskonflikten. Das primäre Ziel von git merge ist zu beheben oder warnen über diese Konflikte automatisch.

Dieser Leitfaden erklärt, was ein Zusammenführungskonflikt ist, und bietet Lösungen, wenn er nicht automatisch aussortiert wird. Der Artikel enthält außerdem hilfreiche Tipps zum Verhindern von Konflikten beim Zusammenführen von Git.

Voraussetzungen

  • Git installiert und konfiguriert (unter Windows, Mac und Ubuntu).
  • Ein Git-Merge-Konflikt zwischen einem lokalen und einem Remote-Branch.
  • Zugriff auf ein Terminal oder eine Befehlszeile
  • Vim-Editor für das Tutorial (Um Vim zu installieren, folgen Sie einer unserer Anleitungen:How to Install Vim 8.2 on Ubuntu 18.04 or How to Install Vim 8.2 on CentOS 7)

Was ist ein Git-Merge-Konflikt?

Bei der Arbeit mit Versionskontrollsystemen wie Git lösen sich die meisten Zusammenführungskonflikte automatisch. Es gibt jedoch Situationen, in denen git merge kann ein Problem nicht lösen.

Einige Beispiele für Zusammenführungskonflikte sind:

  • Ändern derselben Codezeilen in einer Datei.
  • Entfernen von Dateien, während Änderungen an anderer Stelle vorgenommen werden.

Da das Problem lokal auftritt und die restlichen Projektmitglieder sich des Problems nicht bewusst sind, hat die Lösung des Konflikts hohe Priorität und erfordert eine sofortige Lösung.

Arten von Git-Merge-Konflikten

Die allgemeinen Arten von Zusammenführungskonflikten hängen davon ab, wann das Problem auftritt. Die Konflikte treten entweder auf:

  • Vor dem Zusammenführen , was darauf hinweist, dass lokale Änderungen nicht aktuell sind. Die Konfliktfehlermeldung wird angezeigt, bevor die Zusammenführung beginnt, um Probleme zu vermeiden.
  • Während der Zusammenführung , was auf ein Überschreibproblem hinweist. Die Fehlermeldung wird angezeigt und stoppt den Zusammenführungsprozess, um ein Überschreiben von Änderungen zu vermeiden.

So lösen Sie Merge-Konflikte in Git

Es gibt drei Möglichkeiten um einen Zusammenführungskonflikt in Git zu lösen:

1. Akzeptieren Sie die lokale Version . Um alle Änderungen an einer Datei von der lokalen Version zu akzeptieren, führen Sie Folgendes aus:

git checkout --ours <file name>

Alternativ können Sie die lokale Version für alle akzeptieren widersprüchliche Dateien, verwenden Sie:

git merge --strategy-option ours

2. Akzeptieren Sie die Remote-Version . Um die Änderungen an einer Datei aus dem Remote-Zweig zu aktualisieren, führen Sie Folgendes aus:

git checkout --theirs <file name>

Akzeptieren Sie die Remote-Version für alle widersprüchliche Dateien mit:

git merge --strategy-option theirs

3. Änderungen einzeln prüfen . Die letzte Option besteht darin, jede Änderung separat zu überprüfen. Diese Option ist auch der beste Weg, besonders wenn Sie mit mehreren Dateien und Personen arbeiten. Verwenden Sie spezielle Tools, um diese Aufgabe leichter handhabbar zu machen, um einzelne Konflikte zu überprüfen .

Letztendlich hängt die Wahl, welche Teile des Codes bleiben und welche nicht, von der Entscheidung des Entwicklers für das aktuelle Projekt ab.

Ein Merge-Konflikt in Git bekommen

Der Zusammenführungskonflikt in Git tritt auf, wenn der Befehl git merge wirft einen Fehler.

Die Fehlermeldung gibt die Informationen darüber aus, wo der Konflikt vorliegt. Überprüfen Sie die Datei aus der Fehlermeldung und sehen Sie sich den Inhalt an, wo der Zusammenführungskonflikt aufgetreten ist:

Git fügt automatisch drei Indikatoren neben den widersprüchlichen Codezeilen hinzu:

  • <<<<<<< (sieben „kleiner als“-Zeichen) gefolgt von HEAD , was ein Alias ​​für den aktuellen Zweig ist. Die Symbole zeigen den Beginn der Bearbeitungen innerhalb dieses Abschnitts an.
  • ======= (sieben "Gleichheitszeichen"), die das Ende der Überarbeitungen innerhalb des aktuellen Zweigs und den Beginn der Bearbeitungen innerhalb eines neuen Zweigs anzeigen.
  • >>>>>>> (sieben "größer als"-Zeichen), gefolgt von der Verzweigung, in der die versuchte Zusammenführung stattgefunden hat. Die hinzugefügten Symbole zeigen das Ende der Bearbeitungen innerhalb des in Konflikt stehenden Zweigs an.

Die hinzugefügte Syntax hilft beim Durchsuchen des Codes, um den Ort des Zusammenführungskonflikts zu finden. Ein viel einfacherer Ansatz ist jedoch die Verwendung eines Differenz-/Zusammenführungstools, um die Probleme zu erkennen und die Änderungen zu verfolgen.

Ein Standard-Diff-Tool in Git einrichten

So richten Sie das Standard-Diff-Tool für git mergetool ein :

1. Führen Sie die folgende Zeile in Ihrem Terminal aus:

git mergetool --tool-help

Die Ausgabe druckt alle unterstützten Diff-Tools für Ihr aktuelles Setup aus:

Je nach Editor Ihrer Wahl stehen verschiedene Tools zur Verfügung. Zum Beispiel:

  • Emacs diff-Tools:Ediff oder emerge
  • Vim diff-Tools:vimdiff, vimdiff2 oder vimdiff3

Die weiteren Schritte zeigen ein Beispiel für die Einrichtung des vimdiff Werkzeug für Vim.

2. Ändern Sie die git config So legen Sie das Standard-Merge-Tool fest:

git config merge.tool <tool name>

Wenn Sie beispielsweise Vim verwenden, führen Sie Folgendes aus:

git config merge.tool vimdiff

3. Stellen Sie das Diff-Tool so ein, dass es den gemeinsamen Vorfahren für beide Dateien anzeigt, das ist die Version vor allen Änderungen:

git config merge.conflictstyle diff3

4. Stellen Sie die Option so ein, dass vor dem Ausführen keine Eingabeaufforderung angezeigt wird:

git config mergetool.prompt false

Die Einrichtung des Diff-Tools für Git ist abgeschlossen.

Mergetool verwenden, um die Unterschiede zu sehen

So verwenden Sie das mergetool und sehen Sie sich die Unterschiede an, führen Sie Folgendes aus:

git mergetool

Die Ausgabe zeigt ein Fenster mit vier Ansichten:

1. LOKAL stellt die Dateiversion aus dem aktuellen Zweig dar.

2. BASIS So sah die Datei vor Änderungen aus.

3. FERNBEDIENUNG zeigt, wie die Datei im entfernten Zweig aussieht, in dem sich die widersprüchlichen Informationen befinden.

4. VERBUNDEN hat die endgültige Zusammenführungsdatei. Dieses Ergebnis stellt dar, was im Repository gespeichert wird.

Die primären Navigationsbefehle zwischen diesen Fenstern sind:

  • STRG+WW zwischen den Fenstern wechseln.
  • STRG+WJ um zur MERGED-Fensteransicht zu springen.
  • STRG+WX um die Plätze der Fenster zu wechseln.

Informationen zur erweiterten Navigation sind mit dem Befehl :help window-moving verfügbar .

Aktualisieren und Lösen eines Zusammenführungskonflikts

Aktualisieren Sie die MERGED-Datei, um einen Konflikt zu lösen. Einige Abkürzungen zum Aktualisieren der MERGED-Version sind:

  • :diffg LOKAL aktualisiert die auf die LOCAL-Version.
  • :diffg BASE Updates der BASE-Version.
  • :diffg REMOTE Updates auf die REMOTE-Version.

Sobald die Informationen aktualisiert sind, speichern und beenden Sie mit :wqa .

Commit und Cleanup

Der letzte Schritt besteht darin, die zusätzlichen Dateien festzuschreiben und zu bereinigen. Übertragen Sie die aktualisierte Version, indem Sie Folgendes ausführen:

git commit -m "<your message>"

Das Diff-Tool erstellt zusätzliche Dateien im Projekt zum Vergleichen von Versionen. Bereinigen Sie sie mit:

git clean -f

Tipps zur Vermeidung von Zusammenführungskonflikten

Zusammenführungskonflikte treten nur auf, wenn der Computer das Problem nicht automatisch lösen kann.

Hier sind einige Tipps, wie Sie Zusammenführungskonflikte vermeiden können:

  • Verwenden Sie wann immer möglich eine neue Datei anstelle einer vorhandenen.
  • Vermeiden Sie das Hinzufügen von Änderungen am Ende der Datei.
  • Verschieben und ziehen Sie Änderungen so oft wie möglich.
  • Verschönere Code nicht und organisiere Importe nicht selbst.
  • Vermeiden Sie die Denkweise eines Einzelprogrammierers, indem Sie die anderen Leute im Auge behalten, die am selben Code arbeiten.

Ubuntu
  1. So aktualisieren Sie Git

  2. Wie funktioniert Git?

  3. So erstellen Sie einen neuen Zweig in Git

  4. So installieren Sie Git unter Ubuntu 18.04 / 20.04

  5. So installieren Sie Git unter CentOS 8

So installieren Sie Git unter Ubuntu 15.04

So installieren Sie Git unter Ubuntu 16.04

So installieren Sie Git unter Ubuntu 18.04 LTS

So installieren Sie Git unter Ubuntu 19.10

So installieren Sie Git unter Linux Mint 19

So installieren Sie Gitea unter Ubuntu 22.04