Wie man Zusammenführungskonflikte in Git löst
Wie löse ich Zusammenführungskonflikte in Git?
4577
3
Wie löse ich Zusammenführungskonflikte in Git?
Versuchen Sie es:
git mergetool
Es öffnet eine grafische Benutzeroberfläche, die Sie schrittweise durch jeden Konflikt führt, und Sie können wählen, wie er zusammengeführt werden soll. Manchmal muss man danach noch ein wenig von Hand nachbearbeiten, aber normalerweise reicht es aus. Es ist auf jeden Fall viel besser als die ganze Sache von Hand zu machen.
Wie von @JoshGlover kommentiert:
Der Befehl öffnet nicht unbedingt eine grafische Benutzeroberfläche, es sei denn, Sie installieren eine. Die Ausführung von
git mergetool
führte bei mir dazu, dassvimdiff
verwendet wurde. Sie können eines der folgenden Werkzeuge installieren, um es stattdessen zu verwenden:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.Unten ist ein Beispiel für die Verwendung von
vimdiff
zur Lösung von Konflikten beim Zusammenführen. Basierend auf diesem LinkSchritt 1: Führen Sie folgende Befehle in Ihrem Terminal aus
Dadurch wird vimdiff als Standard-Zusammenführungswerkzeug festgelegt.
Schritt 2: Führen Sie folgenden Befehl im Terminal aus
Schritt 3: Sie werden eine vimdiff-Anzeige im folgenden Format sehen
Diese 4 Ansichten sind
Sie können zwischen diesen Ansichten mit ctrl+w navigieren. Die MERGED-Ansicht erreichen Sie direkt mit ctrl+w gefolgt von j.
Mehr Infos zur vimdiff-Navigation hier und hier
Schritt 4. Sie können die MERGED-Ansicht auf folgende Weise bearbeiten
Wenn Sie Änderungen von REMOTE erhalten wollen
Wenn Sie Änderungen von BASE abrufen möchten
Wenn Sie Änderungen von LOCAL abrufen möchten
Schritt 5. Speichern, Beenden, Bestätigen und Aufräumen
:wqa
Speichern und Beenden von vigit commit -m "Nachricht"
git clean
Entfernen Sie zusätzliche Dateien (z.B. *.orig), die vom Diff-Tool erstellt wurden.Stellen Sie fest, welche Dateien in Konflikt stehen (Git sollte Ihnen das sagen).
Öffnen Sie jede Datei und untersuchen Sie die Diffs; Git grenzt sie ab. Hoffentlich ist es offensichtlich, welche Version eines jeden Blocks beibehalten werden soll. Möglicherweise müssen Sie dies mit anderen Entwicklern besprechen, die den Code übertragen haben.
Sobald Sie den Konflikt in einer Datei gelöst haben, fügen Sie
git add the_file
hinzu.Sobald Sie alle Konflikte aufgelöst haben, führen Sie
git rebase --continue
oder den Befehl Git sagte, dass du das tun sollst, wenn du fertig bist.Wenn Sie häufig kleine Übertragungen vornehmen, dann schauen Sie sich zunächst die Übertragungskommentare mit
git log --merge
an. Dann wird Ihnengit diff
die Konflikte zeigen.Bei Konflikten, die mehr als ein paar Zeilen umfassen, ist es einfacher, mit einem externen GUI-Tool zu sehen, was vor sich geht. Ich mag opendiff -- Git unterstützt auch vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge von Haus aus und Sie können weitere installieren:
git config merge.tool "your.tool"
setzt das von Ihnen gewählte Tool und dann zeigt Ihnengit mergetool
nach einem fehlgeschlagenen Merge die Diffs im Kontext.Jedes Mal, wenn Sie eine Datei bearbeiten, um einen Konflikt aufzulösen, wird
git add filename
den Index aktualisieren und Ihr Diff wird ihn nicht mehr anzeigen. Wenn alle Konflikte beseitigt sind und die Dateien mitgit add
bearbeitet wurden, schließtgit commit
die Zusammenführung ab.