Auflösen von Mergekonflikten in Visual Studio

Wenn Sie einen Branch in einen anderen mergen, kann es zu Konflikten durch Dateiänderungen aus Commits in einem Branch mit den Änderungen im anderen Branch kommen. Git versucht, diese Änderungen über den Verlauf in Ihrem Repository aufzulösen, um zu bestimmen, wie die gemergten Dateien aussehen sollen. Wenn nicht klar ist, wie Änderungen gemergt werden sollen, stoppt Git den Mergevorgang und teilt Ihnen mit, welche Dateikonflikte bestehen.

Grundlegendes zu Mergekonflikten

Die folgende Abbildung zeigt ein einfaches Beispiel für widersprüchliche Änderungen in Git. In diesem Beispiel werden im Mainbranch und im Bugfixbranch Aktualisierungen an denselben Quellcodezeilen vorgenommen.

Diagram that shows a merge conflict.

Wenn Sie versuchen, den Bugfixbranch in den Mainbranch zu mergen, kann Git nicht bestimmen, welche Änderungen in der gemergten Version verwendet werden sollen. Möglicherweise möchten Sie die Änderungen im Mainbranch, im Bugfixbranch oder eine Kombination der beiden beibehalten. Beheben Sie diesen Konflikt mit einem Mergecommit im Mainbranch, der die widersprüchlichen Änderungen zwischen den beiden Branches in Einklang bringt.

Diagram that shows how a merge commit resolves a merge conflict.

Das häufigste Mergekonfliktszenario tritt auf, wenn Sie Aktualisierungen aus einem Remotebranch in Ihren lokalen Branch abrufen (z. B. von origin/bugfix in Ihren lokalen Bugfixbranch). Sie können diese Konflikte genauso beheben: Erstellen Sie einen Commit für Ihren lokalen Branch, um die Änderungen in Einklang zu bringen, und führen Sie dann den Mergevorgang durch.

Verhindern von Mergekonflikten

Git ist in den meisten Fällen problemlos in der Lage, Dateiänderungen automatisch zu mergen, solange sich der Dateiinhalt zwischen Commits nicht erheblich ändert. Wenn Ihr Branch weit vom Mainbranch abweicht, sollten Sie Ihre Branches umbasieren, bevor Sie einen Pull Request öffnen. Umbasierte Branches werden ohne Konflikte in Ihren Mainbranch gemergt.

Lösen von Mergekonflikten

  • Wenn Sie mit anderen im selben Branch zusammenarbeiten, können Mergekonflikte auftreten, wenn Sie Ihre Änderungen pushen.

    Screenshot of merge conflict after a push.

  • Visual Studio erkennt, ob sich der lokale Branch, an dem Sie gearbeitet haben, vom Remotenachverfolgungsbranch abweicht, und stellt Ihnen dann Auswahlmöglichkeiten zur Verfügung.

    Screenshot of the options available when the local branch is behind the remote branch.

    Hinweis

    Wenn Ihr Remoterepository erzwungenen Push unterstützt, können Sie es über Git>Einstellungen aktivieren.

    Wählen Sie in diesem Beispiel Pullen, dann Pushen aus, um Änderungen einzubinden, die im Remoterepository vorgenommen wurden. Wenn beim Pullen von Änderungen oder beim Mergen von zwei Branches Mergekonflikte auftreten, informiert Visual Studio Sie im Fenster Git-Änderungen, im Fenster Git-Repository und bei Dateien, die Konflikte aufweisen.

    Screenshot of a merge conflict notification.

  • Im Fenster Git-Changes wird eine Liste von Dateien mit Konflikten unter Nicht gemergte Änderungen angezeigt. Doppelklicken Sie auf eine Datei, um die Konfliktlösung zu beginnen. Wenn Sie eine Datei mit Konflikten im Editor geöffnet haben, können Sie auch Merge-Editor öffnen auswählen.

    Screenshot of merge conflict status in the Git Changes window.

  • Beginnen Sie im Merge-Editor mit der Konfliktlösungen mit einer der folgenden Methoden (wie im nummerierten Screenshot dargestellt):

    1. Gehen Sie die Konflikte Zeile für Zeile durch, und wählen Sie die rechte oder linke Seite aus, indem Sie die entsprechenden Kontrollkästchen aktivieren.
    2. Behalten Sie alle in Konflikt stehenden Änderungen bei, oder ignorieren Sie sie.
    3. Bearbeiten Sie Ihren Code manuell im Fenster Ergebnis.

    Screenshot that shows how to resolve a merge conflict in Visual Studio 2022.

    Tipp

    Wenn Ihnen das Standardlayout im Merge-Editor nicht gefällt, können Sie es über das Dropdownmenü des Zahnradsymbols ändern.

    Screenshot of the Merge Editor layout options.

    Der folgende Screenshot veranschaulicht beispielsweise die Darstellung der vertikalen Ansicht:

    Screenshot of vertical view in the Merge Editor user interface.

  • Wählen Sie nach der Auflösung der Mergekonflikte Merge akzeptieren aus. Wiederholen Sie diesen Vorgang für alle in Konflikt stehenden Dateien.

    Screenshot of the Accept Merge action in Visual Studio 2022.

  • Erstellen Sie im Fenster Git-Änderungen einen Mergecommit, um den Konflikt zu beheben.

    Screenshot of how to create a merge commit by using the Git Changes window.

    Hinweis

    Wenn Sie alle Ihre Änderungen an einer Datei beibehalten müssen, können Sie mit der rechten Maustaste im Abschnitt Nicht gemergte Änderungen auf die Datei klicken, und dann Aktuelle beibehalten (Lokal) auswählen, ohne den Merge-Editor öffnen zu müssen.

    Screenshot of the Keep Current menu option.

Tipp

Weitere Informationen zu den verfügbaren Barrierefreiheitsoptionen finden Sie im Abschnitt Git-Tastenkombinationen der Seite Tipps und Tricks zur Barrierefreiheit für Visual Studio.