5329 Stimmen

Wie löse ich Zusammenführungskonflikte in einem Git-Repository?

Ich möchte Zusammenführungskonflikte in meinem Git-Repository auflösen.

Wie kann ich das tun?

40 Stimmen

Der folgende Blog-Beitrag enthält ein sehr gutes Beispiel für den Umgang mit Merge-Konflikten mit Git, das Sie auf den richtigen Weg bringen sollte. Umgang mit und Vermeidung von Konflikten in Git

4 Stimmen

Sie können ein Zusammenführungswerkzeug konfigurieren (kdiff3 jebaird.com/2013/07/08/… ) und verwenden Sie dann git mergetool. Wenn Sie in großen Entwicklerteams arbeiten, werden Sie immer wieder auf Merge-Konflikte stoßen.

0 Stimmen

Vergessen Sie nicht, dass Sie die meisten Merge-Konflikte durch regelmäßiges Merging Downstream entschärfen können!

38voto

Sazzad Hissain Khan Punkte 33230

Bonus:

Da ich in den vorherigen Antworten von pull/fetch/merge gesprochen habe, möchte ich einen interessanten und produktiven Trick vorstellen,

git pull --rebase

Der obige Befehl ist der nützlichste Befehl in meinem Git-Leben, der mir viel Zeit erspart hat.

Bevor Sie Ihre neu vorgenommene Änderung auf den Remote-Server übertragen, versuchen Sie git pull --rebase eher git pull und manuell merge und synchronisiert automatisch die letzten Änderungen des entfernten Servers (mit einem Fetch + Merge) und setzt Ihren lokalen letzten Commit an den Anfang des Git-Logs. Sie müssen sich keine Gedanken über manuelles Pull/Merge machen.

Im Falle eines Konflikts, verwenden Sie einfach

git mergetool
git add conflict_file
git rebase --continue

Einzelheiten finden Sie unter: Was bewirkt "git pull -rebase"?

34voto

Qijun Liu Punkte 1595

Es gibt drei Schritte:

  1. Finden Sie heraus, welche Dateien Konflikte verursachen, indem Sie den Befehl

     git status
  2. Überprüfen Sie die Dateien, in denen Sie die Konflikte finden, die wie folgt gekennzeichnet sind

     <<<<<<<<head
     blablabla
  3. Ändern Sie es so, wie Sie es wollen, und übertragen Sie es mit den Befehlen

     git add solved_conflicts_files
     git commit -m 'merge msg'

0 Stimmen

Hat bei mir funktioniert! Danke!

0 Stimmen

Sie müssen aufpassen, wenn Sie dies während des Umbasierens tun. Sie sollten verwenden git rebase --continue anstelle von Git Commit

34voto

Mohamed Ali Punkte 3191

Wenn Sie genau wissen, dass Änderungen in einem der Repositories nicht wichtig sind, und alle Änderungen zugunsten des anderen Repositories auflösen wollen, verwenden Sie einfach:

git checkout . --ours

Änderungen zu Gunsten von Ihr Repository , oder

git checkout . --theirs

Änderungen zu Gunsten der andere oder das Hauptrepository .

Andernfalls müssen Sie ein GUI-Zusammenführungstool verwenden, um die Dateien einzeln durchzugehen, z. B. das Zusammenführungstool p4merge oder schreiben Sie einen Namen, den Sie bereits installiert haben

git mergetool -t p4merge

und wenn Sie eine Datei beendet haben, müssen Sie sie speichern und schließen, damit die nächste geöffnet werden kann.

2 Stimmen

git checkout . --theirs mein Problem behoben, danke

0 Stimmen

Wenn Sie es vorziehen, Konflikte manuell zu lösen, versuchen Sie, den Ordner in Visual Studio Code zu öffnen; er markiert Dateien mit Konflikten und färbt Konfliktlinien in jeder Datei ein

33voto

Chhabilal Punkte 1076

Bitte befolgen Sie die folgenden Schritte, um Merge-Konflikte in Git zu beheben:

  1. Prüfen Sie den Git-Status: Git-Status

  2. Holen Sie sich das Patchset: Mitnahmewerkzeug (checken Sie den richtigen Patch aus Ihrem Git-Commit aus)

  3. Checken Sie einen lokalen Zweig aus (in meinem Beispiel hier temp1): git checkout -b temp1

  4. Ziehen Sie die aktuellen Inhalte aus dem Master: git pull --rebase origin master

  5. Starten Sie das Mergetool und überprüfen Sie die Konflikte und beheben Sie sie...und überprüfen Sie die Änderungen im entfernten Zweig mit Ihrem aktuellen Zweig: Git-Mergetool

  6. Überprüfen Sie den Status erneut: Git-Status

  7. Löschen Sie die unerwünschten Dateien, die lokal von mergetool erstellt wurden. Normalerweise erstellt mergetool zusätzliche Dateien mit der Erweiterung *.orig. Bitte löschen Sie diese Datei, da es sich nur um ein Duplikat handelt, und korrigieren Sie die Änderungen lokal und fügen Sie die richtige Version Ihrer Dateien hinzu. git add #Ihre_geänderten_korrekten_Dateien

  8. Überprüfen Sie den Status erneut: Git-Status

  9. Übertragen Sie die Änderungen mit derselben Commit-ID (dadurch wird ein neuer separater Patchsatz vermieden): git commit --amend

  10. In den Master-Zweig verschieben: Git-Push (zu Ihrem Git-Repository)

30voto

iankit Punkte 7948

Die Antwort von CoolAJ86 bringt so ziemlich alles auf den Punkt. Falls Sie Änderungen in beiden Zweigen im selben Stück Code haben, müssen Sie einen manuellen Merge durchführen. Öffnen Sie die konfliktbehaftete Datei in einem beliebigen Texteditor und Sie sollten folgende Struktur sehen.

(Code not in Conflict)
>>>>>>>>>>>
(first alternative for conflict starts here)
Multiple code lines here
===========
(second alternative for conflict starts here)
Multiple code lines here too    
<<<<<<<<<<<
(Code not in conflict here)

Wählen Sie eine der Alternativen oder eine Kombination aus beiden so aus, wie Sie den neuen Code haben möchten, und entfernen Sie dabei Gleichheitszeichen und spitze Klammern.

git commit -a -m "commit message"
git push origin master

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X