Lösen von Mergekonflikten

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

Visual Studio 2022 | Visual Studio 2019 | Visual Studio 2017 | Visual Studio 2015

Wenn Sie zusammenführen oder rebasen, geben Sie Git an, Änderungen, die auf einem Zweig vorgenommen wurden, mit Änderungen an einer anderen zu integrieren. Häufig schließt Git einen Zusammenführungs- oder Rebase-Vorgang automatisch ohne Hilfe ab. Wenn Git jedoch festgestellt hat, dass bei einer Verzweigung eine Änderung mit einer Änderung, die auf einer anderen vorgenommen wurde, angezeigt wird, wird sie aufgefordert, den Konflikt zu lösen. Ein Zusammenführungskonflikt kann auftreten, wenn die zusammengeführten Zweige dieselbe Dateizeile anders bearbeiten oder wenn ein Zweig eine Datei ändert und eine andere Verzweigung es löscht. Der Prozess zum Auflösen von Zusammenführungskonflikten gilt sowohl für Git-Zusammenführung als auch für die Rebase.

Sie können Zusammenführungskonflikte in Visual Studio beheben oder mithilfe der Befehlszeile und eines beliebigen Text-Editors verwenden.

Eine Übersicht über den Git-Workflow finden Sie unter Azure Repos Git-Lernprogramm.

In diesem Artikel werden Verfahren für die folgenden Aufgaben bereitgestellt:

  • Verstehen von Zusammenführungskonflikten
  • Lösen von Mergekonflikten

Verstehen von Zusammenführungskonflikten

Git merge or rebase integrations commits from a source branch in your current local branch (target branch). Die Git-Zusammenführung führt entweder einen Schnellvorlauf oder einen no-fast-forward Merge aus. Der Seriendruck ohne Schnelllauf wird auch als Drei-Wege-Zusammenführung oder true-Zusammenführung bezeichnet. Git Rebase ist ein weiterer Zusammenführungstyp. Diese Zusammenführungstypen werden im folgenden Diagramm angezeigt.

Diagramm mit dem Vor- und Nach-Commit beim Verwenden von Git-Seriendruck und Git-Rebase.

Bei Git-Seriendruck ist die Spitze des Zielzweigs innerhalb des Quellzweigs vorhanden, ist der Standarddrucktyp eine schnell weiterleitende Zusammenführung. Andernfalls ist der Standarddrucktyp kein Schnelldruck.

Ein Schnelldruck kann niemals einen Zusammenführungskonflikt aufweisen, da Git keinen Schnelldruck anwenden wird, wenn sich die Spitze des Zielzweigs vom Quellzweig abweicht. Standardmäßig verwendet Git eine schnelle Zusammenführung, wenn möglich. Git wendet z. B. einen Schnelldruck auf einem lokalen Zweig an, den Sie nur aktualisieren, indem Sie von seinem Remote-Entsprechungszweig abrufen.

Ein no-fast-forward Merge generiert einen neuen Zielzweig "Merge Commit", der Quellzweigänderungen mit Zielzweigänderungen integriert. Die anwendbaren Änderungen sind diejenigen, die nach dem letzten Commit vorgenommen wurden, der für beide Zweige üblich ist. Im vorherigen Diagramm ist commit C der letzte häufige Commit in beiden Zweigen. Wenn sich alle Quellzweigänderungen mit einer Zielzweigänderung ändern, wird Git aufgefordert, den Zusammenführungskonflikt zu beheben. Der Merge Commit (L) enthält die integrierten Quellzweig- und Zielzweigänderungen. Die Quell- und Zielzweigtipps (K und E) sind die Eltern des Merge-Commits. Im Commitverlauf Ihres Zweigs ist ein Zusammenführungs-Commit ein nützlicher Marker für einen Zusammenführungsvorgang und zeigt klar an, welche Verzweigungen zusammengeführt wurden.

Git rebaset den Commitverlauf des Zielzweigs erneut, sodass es alle Quellzweig-Commits enthält, gefolgt von allen Zielzweig-Commits seit dem letzten gemeinsamen Commit. Im vorherigen Diagramm ist commit C der letzte häufige Commit in beiden Zweigen. Eine weitere Möglichkeit zum Anzeigen ist, dass eine Neubasis die Änderungen in Ihrem Zielzweig oben im Quellzweigverlauf erneut anzeigt. Wenn sich alle Quellzweigänderungen mit einer Zielzweigänderung ändern, wird Git aufgefordert, den Zusammenführungskonflikt zu beheben. Wie bei der schnell weiterleitenden Zusammenführung erstellt eine Rebase keinen Merge-Commit. Insbesondere ändert ein Rebase die Sequenz der vorhandenen Zielzweig-Branch-Commits, was nicht der Fall für die anderen Zusammenführungsstrategien ist. Im vorherigen Diagramm enthält commit K' die gleichen Änderungen wie K, hat jedoch eine neue Commit-ID, da er zurück zum Commit E statt C verknüpft.

Git Merge und Rebase ändern nur den Zielzweig – der Quellzweig bleibt unverändert. Wenn Sie auf einen oder mehrere Zusammenführungskonflikte stoßen, müssen Sie sie auflösen, um die Seriendruck- oder Neubasis abzuschließen. Oder Sie können den Zusammenführungs-/Rebasevorgang abbrechen und den Zielzweig an den vorherigen Zustand zurückgeben.

Weitere Informationen zu Zusammenführungsoptionen und Strategien finden Sie im Git-Referenzhandbuch und in Git-Zusammenführungsstrategien.

Wann die Zusammenführungskonflikte aufgelöst werden sollen

Git-Seriendruck und Git-Rebase werden im Git-Workflow umfassend verwendet. Bei der Arbeit an einem lokalen Feature oder Bugfix-Zweig ist es gängige Vorgehensweise:

  1. Halten Sie Ihre lokale main Verzweigung mit ihrem Remote-Gegenstück aktuell, indem Sie regelmäßig ziehen, um Remote-Commits abzurufen und zusammenzuführen.
  2. Integrieren Sie lokale Verzweigungsupdates in Ihren lokalen main Featurezweig, indem Sie eine Rebase verwenden oder zusammenführen.
  3. Sichern Sie Ihre Arbeit auf dem lokalen Featurezweig, indem Sie sie an die entsprechende Remotezweige pushen .
  4. Erstellen Sie auf Featureabschluss eine Pullanforderung , um Ihre Remotefeature-Branch in den Remotezweig main zusammenzuführen.

Durch die häufige Integration von Remoteänderungen in Ihr lokales Repo können Sie sich der aktuellen Arbeit von anderen bewusst bleiben und alle Zusammenführungskonflikte beheben, die entstehen.

Lösen von Mergekonflikten

Der Prozess zum Auflösen von Zusammenführungskonflikten gilt sowohl für Git-Zusammenführung als auch für Git-Rebase. Obwohl die folgenden Schritte beschreiben, wie Zusammenführungskonflikte während einer Zusammenführung aufgelöst werden, können Sie zusammenführen Konflikte während einer Neubasis ähnlich lösen.

Tipp

Wenn der Quellzweig ein Remoteverfolgungszweig ist, stellen Sie sicher, dass branch auf dem neuesten Stand ist, indem Sie einen Git-Abruf vor einem Zusammenführen ausführen. Oder führen Sie den Git-Pullbefehl aus, der einen Git-Abruf mit einem Git-Zusammenführen kombiniert.

Visual Studio 2019 Version 16.8 und höher bietet eine Git-Versionssteuerungserfahrung, während die Team Explorer Git-Benutzeroberfläche beibehalten wird. Um Team-Explorer zu verwenden, deaktivieren Sie die Option Extras>Optionen>Vorschau Features>Neue Git-Benutzeroberfläche aus der Menüleiste. Sie können Git-Features von beiden Schnittstellen austauschbar verwenden. Nachfolgend stellen wir einen querseitigen Vergleich zur Lösung von Zusammenführungskonflikten während eines Git-Merges bereit.

Visual Studio Git

  1. Im Bereich "Zweigen " des Git-Repositoryfensters auschecken Sie den Zielzweig. Klicken Sie dann mit der rechten Maustaste auf den Quellzweig, und wählen Sie "Quellzweig zusammenführen<" in <Zielzweig>> aus.

Screenshot der Option

  1. Visual Studio benachrichtigt Sie, wenn Git die Zusammenführung aufgrund von Konflikten beendet hat. In diesem Fall können Sie entweder die Konflikte auflösen oder die Zusammenführung abbrechen und zum Vordruckzustand zurückkehren. Im Abschnitt "Unmerged Changes" des Git Changes-Fensters werden die Dateien mit Zusammenführungskonflikten aufgelistet. Doppelklicken Sie für eine Datei mit Zusammenführungskonflikten in ihrem Inhalt auf die Datei, um sie im Seriendruck-Editor zu öffnen.

Screenshot der Dateien mit Zusammenführungskonflikten im Git-Änderungsfenster von Visual Studio 2019.

  1. Im Seriendruck-Editor zeigt der Bereich " Eingehende " die Quellzweigdateiversion , der Aktuelle Bereich zeigt die Zielzweigdateiversion an, und der Ergebnisbereich zeigt die Ergebnisdruckdatei an. Wenn Sie bestimmte Quell- oder Zielzweigänderungen anwenden möchten, aktivieren Sie das Kontrollkästchen neben den Konfliktzeilen, die Sie beibehalten möchten. Sie können die Seriendruckdatei auch direkt im Ergebnisbereich bearbeiten. Wählen Sie "Seriendruck akzeptieren " aus, nachdem Sie alle Zusammenführungskonflikte in der aktuellen Datei behoben haben. Wiederholen Sie diesen Schritt für jede Datei mit Inhaltskonflikten.

Screenshot des Seriendruck-Editors in Visual Studio 2019.

  1. Klicken Sie für eine Datei, die in einem Zweig bearbeitet wurde und in der anderen gelöscht wurde, mit der rechten Maustaste auf die Datei, und wählen Sie die gewünschte Verzweigungsaktion aus.

Screenshot des Kontextmenüs für eine konfliktierende Datei im Git-Änderungsfenster von Visual Studio 2019.

  1. Geben Sie im Fenster "Git-Änderungen" eine Commitnachricht ein, und wählen Sie " Commit" aus, um den Seriendruck abzuschließen– nachdem Sie alle Zusammenführungskonflikte für alle Dateien behoben haben.

Screenshot der Schaltfläche

Visual Studio Team Explorer

  1. Überprüfen Sie in der Ansicht "Zweigen " des Team-Explorers die Zielzweige. Klicken Sie dann mit der rechten Maustaste auf den Quellzweig, und wählen Sie "Aus zusammenführen" aus.

Screenshot der Option

  1. Überprüfen Sie die Seriendruckoptionen, und klicken Sie dann auf "Zusammenführen".

Screenshot der Zusammenführungsdetails in der Ansicht

  1. Visual Studio benachrichtigt Sie, wenn Git die Zusammenführung aufgrund von Konflikten beendet hat. In diesem Fall können Sie entweder die Konflikte auflösen oder die Zusammenführung abbrechen und zum Vordruckzustand zurückkehren. Um Konflikte zu lösen, wählen Sie "Konflikte " aus, um die Ansicht "Konflikte lösen" zu öffnen.

Screenshot der Seriendruckkonfliktnachricht in der Ansicht

  1. Die Ansicht "Konflikte lösen " listet die Dateien mit Zusammenführungskonflikten auf. Wählen Sie eine Datei aus der Liste aus, um die Auflösungsoptionen für diese Datei anzuzeigen.

Screenshot der Liste

  1. Wählen Sie für eine Datei mit Zusammenführungskonflikten in ihren Inhalten die Option "Zusammenführen " aus, um sie im Seriendruck-Editor zu öffnen.

Screenshot der Schaltfläche

  1. Im Seriendruck-Editor zeigt der Quellzweigdateiversion der Quellzweigdatei, der Zielzweigdateiversion, und der Ergebnisbereich zeigt die Ergebnisdruckdatei an. Wenn Sie bestimmte Quell- oder Zielzweigänderungen anwenden möchten, aktivieren Sie das Kontrollkästchen neben den Konfliktzeilen, die Sie beibehalten möchten. Sie können die Seriendruckdatei auch direkt im Ergebnisbereich bearbeiten. Wählen Sie "Seriendruck akzeptieren " aus, nachdem Sie alle Zusammenführungskonflikte in der aktuellen Datei behoben haben. Wiederholen Sie diesen Schritt für jede Datei mit Inhaltskonflikten.

Screenshot des Seriendruck-Editors für Team Explorer in Visual Studio 2019.

  1. Wählen Sie für eine Datei, die in einem Zweig bearbeitet wurde und in der anderen gelöscht wurde, welche Verzweigungsaktion Sie wünschen.

Screenshot der Seriendruckoptionen für eine konfliktierende Datei in der Ansicht

  1. Wählen Sie in der Ansicht "Konflikte auflösen" die Option "Zusammenführen" aus, nachdem Sie alle Zusammenführungskonflikte für alle Dateien aufgelöst haben.

Screenshot der Schaltfläche

  1. Geben Sie in der Ansicht "Änderungen " des Team-Explorers eine Commitnachricht ein, und wählen Sie "Commit" , um den Seriendruck abzuschließen.

Screenshot der Schaltfläche

Nächste Schritte