Lösen von Mergekonflikten

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

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

Wenn Sie die Basis zusammenführen oder neu erstellen, geben Sie Git an, Änderungen zu integrieren, die auf einer Verzweigung vorgenommen wurden, mit Änderungen, die an einem anderen vorgenommen wurden. Häufig schließt Git einen Seriendruck oder eine Neubasis automatisch ohne Ihre Unterstützung ab. Wenn Git jedoch erkennt, dass eine änderung, die auf einer Verzweigung vorgenommen wurde, mit einer Änderung in Konflikt steht, die an einem anderen vorgenommen wurde, wird sie aufgefordert, den Konflikt zu lösen. Ein Zusammenführungskonflikt kann auftreten, wenn die zusammengeführten Verzweigungen dieselbe Dateizeile anders bearbeiten oder wenn eine Verzweigung eine Datei ändert und eine andere Verzweigung sie löscht. Der Prozess zum Auflösen von Zusammenführungskonflikten gilt sowohl für git merge als auch für rebase.

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

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

Dieser Artikel enthält Verfahren für die folgenden Aufgaben:

  • Grundlegendes zu Zusammenführungskonflikten
  • Lösen von Mergekonflikten

Grundlegendes zu Zusammenführungskonflikten

Git merge or rebase integrations commits from a source branch into your current local branch (target branch). Die Git-Zusammenführung führt entweder einen schnell weiterleitenden oder keinen Schnellvorlauf-Zusammenführung aus. Der Seriendruck ohne Schnelleinführung wird auch als Drei-Wege-Zusammenführung oder true-Zusammenführung bezeichnet. Git Rebase ist ein weiterer Seriendrucktyp. Diese Zusammenführungstypen werden im folgenden Diagramm angezeigt.

Diagram showing the before and after commits when using Git merge and Git rebase.

Wenn bei Git-Zusammenführung der Tipp der Zielverzweigung innerhalb der Quellverzweigung vorhanden ist, ist der Standarddrucktyp ein schneller Zusammenführungsvorgang. Andernfalls ist der Standarddrucktyp kein Schnellvorführungsdruck.

Eine Schnellweiterleitung kann niemals einen Zusammenführungskonflikt haben, da Git keine Schnellweiterleitungszusammenführung anwenden wird, wenn sich der Tipp der Zielverzweigung von der Quellverzweigung abweichen lässt. Standardmäßig verwendet Git eine schnell weiterleitende Zusammenführung, wenn möglich. Git wendet z. B. einen schnell weiterleitenden Zusammenführungsvorgang auf einer lokalen Verzweigung an, die Sie nur aktualisieren, indem Sie von der Remote-Entsprechungsverzweigung aus ziehen.

Ein Seriendruck ohne Schnelleinführung generiert einen neuen Zielzweig "Merge Commit", der Quellzweigänderungen in Zielzweigänderungen integriert. Die anwendbaren Änderungen sind diejenigen, die nach dem letzten Commit vorgenommen wurden, der für beide Verzweigungen üblich ist. Im vorherigen Diagramm ist commit C der letzte häufige Commit in beiden Verzweigungen. Wenn eine Änderung der Quellzweige mit einer Änderung der Zielzweige in Konflikt steht, werden Sie von Git aufgefordert, den Zusammenführungskonflikt zu beheben. Der Merge Commit (L) enthält die änderungen der integrierten Quellzweige und Zielzweigänderungen. Die Quell- und Zielzweigtipps (K und E) sind die Übergeordneten des Seriendruck-Commits. Im Commitverlauf Ihrer Verzweigung ist ein Zusammenführungs-Commit eine nützliche Markierung für einen Zusammenführungsvorgang und zeigt deutlich an, welche Verzweigungen zusammengeführt wurden.

Git rebase resequences the commit history of the target branch so that it contains all source branch commits, gefolgt von allen Target Branch Commits seit dem letzten gemeinsamen Commit. Im vorherigen Diagramm ist commit C der letzte häufige Commit in beiden Verzweigungen. Eine weitere Möglichkeit zum Anzeigen ist, dass eine Rebase die Änderungen in Ihrer Zielverzweigung oben im Quellzweigverlauf wiedergibt. Wenn eine Änderung der Quellzweige mit einer Änderung der Zielzweige in Konflikt steht, werden Sie von Git aufgefordert, den Zusammenführungskonflikt zu beheben. Wie bei der schnell weiterleitenden Zusammenführung erstellt eine Neubasis keinen Seriendruck-Commit. Insbesondere ändert eine Neubasis die Sequenz der vorhandenen Zielzweigverzweigungs-Commits, was nicht für die anderen Zusammenführungsstrategien der Fall 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 anstelle von C verknüpft.

Git Merge and rebase only modify the target branch – the source branch bleibt unverändert. Wenn sie auf einen oder mehrere Zusammenführungskonflikte stoßen, müssen Sie sie auflösen, um den Seriendruck abzuschließen oder neu zu erstellen. Oder Sie können den Zusammenführungs-/Neubasisvorgang 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 Sie Zusammenführungskonflikte beheben möchten

Git-Zusammenführung und Git-Neubasis werden im Git-Workflow umfassend verwendet. Bei der Arbeit an einem lokalen Feature oder bugfix Branch ist es üblich, folgendes zu verwenden:

  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 main Verzweigungsupdates mithilfe einer Neubasis oder Zusammenführung in Ihre lokale Featureverzweigung.
  3. Sichern Sie Ihre Arbeit an der lokalen Feature-Verzweigung, indem Sie sie an die entsprechende Remote-Verzweigung pushen .
  4. Erstellen Sie nach Abschluss der Funktion eine Pullanforderung zum Zusammenführen Ihrer Remotefeature-Verzweigung in die Remote-Verzweigung main .

Wenn Sie Remoteänderungen häufig in Ihr lokales Repo integrieren, können Sie sich der aktuellen Arbeit anderer Personen bewusst bleiben und alle zusammenführenden Konflikte beheben, die auftreten.

Lösen von Mergekonflikten

Der Prozess zum Auflösen von Zusammenführungskonflikten gilt sowohl für git merge als auch git rebase. Obwohl in den folgenden Schritten beschrieben wird, wie Sie Zusammenführungskonflikte während einer Zusammenführung auflösen können, können Sie Zusammenführungskonflikte während einer Neubasis ähnlich auflösen.

Tipp

Wenn es sich bei der Quellverzweigung um eine Remotenachverfolgungsverzweigung handelt, stellen Sie sicher, dass verzweigt 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-Seriendruck kombiniert.

Visual Studio Version 2019, Version 16.8 und höher, bietet eine Git-Versionssteuerung während der Verwaltung der Git-Benutzeroberfläche des Team Explorers. Deaktivieren Sie zum Verwenden des Team-ExplorerstoolsOptionsPreview>>FeaturesNew>Git-Benutzeroberfläche über die Menüleiste. Sie können Git-Features von beiden Schnittstellen austauschbar verwenden. Nachfolgend stellen wir einen parallelen Vergleich zur Lösung von Zusammenführungskonflikten während eines Git-Seriendrucks bereit.

Visual Studio Git

  1. Checken Sie im Bereich "Verzweigungen " des Git-Repositoryfensters die Zielzweige aus. Klicken Sie dann mit der rechten Maustaste auf den Quellzweig, und wählen Sie "Quellverzweigung zusammenführen" in <"Zielverzweigung>>" <aus.

Screenshot of the Merge option in the branch context menu in the Git Repository window of Visual Studio 2019.

  1. Visual Studio benachrichtigt Sie, wenn Git die Zusammenführung aufgrund von Konflikten angehalten hat. In diesem Fall können Sie entweder die Konflikte auflösen oder den Zusammenführungsvorgang abbrechen und zum Vordruckstatus zurückkehren. Im Abschnitt "Nicht zusammengeführte Änderungen " des Git-Änderungsfensters werden die Dateien mit Zusammenführungskonflikten aufgelistet. Doppelklicken Sie für eine Datei mit Zusammenführungskonflikten im Inhalt auf die Datei, um sie im Seriendruck-Editor zu öffnen.

Screenshot of the files with merge conflicts in the Git Changes window of Visual Studio 2019.

  1. Im Seriendruck-Editor wird im Bereich "Eingehender Bereich" die Version der Quellzweigdatei angezeigt, der aktuelle Bereich zeigt die Version der Zielzweigdatei, und der Ergebnisbereich zeigt die resultierende Seriendruckdatei 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 annehmen" , nachdem Sie alle Zusammenführungskonflikte in der aktuellen Datei behoben haben. Wiederholen Sie diesen Schritt für jede Datei mit Inhaltskonflikten.

Screenshot of the merge editor in Visual Studio 2019.

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

Screenshot of the context menu for a conflicting file in the Git Changes window of Visual Studio 2019.

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

Screenshot of the commit message and Commit Staged button in the Git Changes window of Visual Studio 2019.

Visual Studio Team Explorer

  1. Überprüfen Sie in der Ansicht "Verzweigungen " des Team-Explorers den Zielzweig. Klicken Sie dann mit der rechten Maustaste auf den Quellzweig, und wählen Sie "Zusammenführen" aus.

Screenshot of the branch Merge From option in the Branches view of Team Explorer in Visual Studio 2019.

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

Screenshot of the merge details in the Branches view of Team Explorer in Visual Studio 2019.

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

Screenshot of the merge conflict message in the Branches view of Team Explorer in Visual Studio 2019.

  1. In der Ansicht "Konflikte auflösen " werden die Dateien mit Zusammenführungskonflikten aufgelistet. Wählen Sie eine Datei aus der Liste aus, um die Auflösungsoptionen für diese Datei anzuzeigen.

Screenshot of the Conflicts list in the Resolve Conflicts view of Team Explorer in Visual Studio 2019.

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

Screenshot of the Merge button in the Resolve Conflicts view of Team Explorer in Visual Studio 2019.

  1. Im Seriendruck-Editor zeigt der Quellbereich die Quellzweigdateiversion, der Zielbereich zeigt die Version der Zielzweigdatei an, und der Ergebnisbereich zeigt die resultierende Seriendruckdatei 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 annehmen" , nachdem Sie alle Zusammenführungskonflikte in der aktuellen Datei behoben haben. Wiederholen Sie diesen Schritt für jede Datei mit Inhaltskonflikten.

Screenshot of the merge editor for Team Explorer in Visual Studio 2019.

  1. Wählen Sie für eine Datei, die in einer Verzweigung bearbeitet und in der anderen gelöscht wurde, die gewünschte Verzweigungsaktion aus.

Screenshot of the merge options for a conflicting file in the Resolve Conflicts view of Team Explorer in Visual Studio 2019.

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

Screenshot of the Commit Merge button in the Resolve Conflicts view of Team Explorer in Visual Studio 2019.

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

Screenshot of the Commit Staged button in the Changes view of Team Explorer in Visual Studio 2019.

Nächste Schritte