Ich möchte Zusammenführungskonflikte in meinem Git-Repository auflösen.
Wie kann ich das tun?
Ich möchte Zusammenführungskonflikte in meinem Git-Repository auflösen.
Wie kann ich das tun?
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"?
Es gibt drei Schritte:
Finden Sie heraus, welche Dateien Konflikte verursachen, indem Sie den Befehl
git status
Überprüfen Sie die Dateien, in denen Sie die Konflikte finden, die wie folgt gekennzeichnet sind
<<<<<<<<head
blablabla
Ä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'
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.
Bitte befolgen Sie die folgenden Schritte, um Merge-Konflikte in Git zu beheben:
Prüfen Sie den Git-Status: Git-Status
Holen Sie sich das Patchset: Mitnahmewerkzeug (checken Sie den richtigen Patch aus Ihrem Git-Commit aus)
Checken Sie einen lokalen Zweig aus (in meinem Beispiel hier temp1): git checkout -b temp1
Ziehen Sie die aktuellen Inhalte aus dem Master: git pull --rebase origin master
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
Überprüfen Sie den Status erneut: Git-Status
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
Überprüfen Sie den Status erneut: Git-Status
Übertragen Sie die Änderungen mit derselben Commit-ID (dadurch wird ein neuer separater Patchsatz vermieden): git commit --amend
In den Master-Zweig verschieben: Git-Push (zu Ihrem Git-Repository)
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 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.
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!
3 Stimmen
Siehe auch git-tower.com/learn/git/ebook/command-line/tools-services/
0 Stimmen
Dies scheint eine detaillierte Anleitung zu sein - githubtraining.com/fix-merge-conflict-git-using-sourcetree
0 Stimmen
Das ist nicht spezifisch für diese Frage, aber ich musste irgendwo sagen, dass der Begriff "Konflikt" in der gängigen Sprache für Versionskontrollsysteme (VCS) sehr schlecht gewählt ist. Was wir in VCS als Konflikt bezeichnen, ist etwas völlig anderes als das, was wir normalerweise als Konflikt im wirklichen Leben sehen. Nehmen wir an, wir haben einen Autounfall. Der eine Fahrer sagt: "Oh, ich habe Sie nicht gesehen". Der andere sagt: "Ok, wir können das reparieren". Das ist überhaupt kein Konflikt. Der Konflikt kann erst danach auftreten. In VCS ist es genau umgekehrt: Die einfache Kollision wird als Konflikt bezeichnet, eine Änderung, die bewusst eine bekannte Änderung rückgängig macht, kann nicht einmal ein Konflikt sein.
0 Stimmen
Eine Reaktion auf meinen vorherigen Kommentar könnte lauten: "Wir wissen, dass es bei einem Git-Konflikt keinen wirklichen Konflikt gibt", aber es steckt mehr dahinter. Wenn Programmierer im Team arbeiten, gibt es Meinungsverschiedenheiten. Es kann vorkommen, dass ein Programmierer bewusst rückgängig macht, was ein anderer getan hat, und das käme einem echten Konflikt näher, aber Git-Konflikte haben nichts mit diesem Prozess zu tun. Wie auch immer, ich denke, der Begriff "Kollision" oder "Unfall" anstelle von "Konflikt" wäre näher an dem, was es tatsächlich ist, denn es passiert, wenn beide Seiten die andere Seite nicht kommen sehen.
0 Stimmen
Eine Nischenfrage zur Lösung eines Konflikts in nur einer Datei, von der Kommandozeile aus, unter Verwendung der dreifachen Zusammenführung mit einer bestimmten Strategie: stackoverflow.com/q/39126509/245966
0 Stimmen
Github.com bietet eine gute Möglichkeit, das Problem zu visualisieren. Stellen Sie sicher, dass Sie sehen este Antwort. (Es gibt auch Möglichkeiten, direkt von der Website aus zu bearbeiten und zu lösen, aber das ist nur eine Bequemlichkeit).
0 Stimmen
gist.github.com/karenyyng/f19ff75c60f18b4b8149 . Dieses Git-Mergetool-Tutorial könnte helfen.