Merge-Konflikte beheben

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Visual Studio 2019 | Visual Studio 2022

Tipp

Sie können KI verwenden, um Azure DevOps-Aufgaben zu unterstützen. Informationen zu den ersten Schritten finden Sie unter Enable AI-Unterstützung bei Azure DevOps MCP Server.

Wenn Sie zusammenführen oder neu basieren, sagen Sie Git, Änderungen, die an einem Branch vorgenommen wurden, mit Änderungen zu integrieren, die an einem anderen Branch vorgenommen wurden. Häufig führt Git eine Zusammenführung oder einen Rebase automatisch ohne Ihre Unterstützung durch. Wenn Git jedoch feststellt, dass eine Änderung an einer Verzweigung mit einer Änderung, die an einer anderen vorgenommen wurde, in Konflikt steht, werden 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 die Git-Zusammenführung als auch für die Neubasis.

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 im Lernprogramm zu Azure Repos Git.

Voraussetzungen

Kategorie Anforderungen
Projektzugriff Mitglied eines Projekts.
Erlaubnisse - Code in privaten Projekten anzeigen: Mindestens einfacher Zugriff.
- Klonen oder Mitwirken an Code in privaten Projekten: Mitglied der Sicherheitsgruppe "Mitwirkende" oder entsprechende Berechtigungen im Projekt.
– Legen Sie Branch- oder Repositoryberechtigungen fest: Berechtigungen verwalten für den Branch oder das Repository.
- Branchrichtlinien und Statusprüfungen festlegen oder den Standardbranch ändern: erforderlich sind die Berechtigung „Richtlinien bearbeiten“ für das Repository oder den Branch oder die Mitgliedschaft in der Sicherheitsgruppe „Projektadministratoren“.
- Ein Repository importieren: Mitglied der Sicherheitsgruppe Projektadministratoren oder die Berechtigung Repository erstellen auf Git-Projektebene auf Zulassen festgelegt. Weitere Informationen finden Sie unter Festlegen von Git-Repositoryberechtigungen.
Dienste Repos aktiviert.
Werkzeuge Wahlfrei. Verwenden Sie az repos Befehle: Azure DevOps CLI.
Kategorie Anforderungen
Projektzugriff Mitglied eines Projekts.
Erlaubnisse - Code anzeigen: Mindestens einfacher Zugriff.
- Code klonen oder dazu beitragen: Mitglied der Sicherheitsgruppe Contributors oder entsprechende Berechtigungen im Projekt.
Dienste Repos aktiviert.

Verständnis von Zusammenführungskonflikten

Git Merge oder Git Rebase integriert Commits aus einem Quellbranch in Ihren aktuellen lokalen Branch (Zielbranch). Git merge führt entweder eine fast-forward oder eine no-fast-forward Zusammenführung aus. Der No-Fast-Forward-Mergevorgang wird auch als Drei-Weg-Merge oder echter Mergevorgang bezeichnet. Git rebase ist eine andere Art von Verschmelzung. Diese Zusammenführungstypen werden im folgenden Diagramm dargestellt.

Diagramm, das die Commits vor und nach der Verwendung von Git merge und Git rebase zeigt.

Wenn bei Git Merge die Spitze des Zielbranchs im Quellbranch enthalten ist, wird standardmäßig ein Fast-Forward Mergevorgang ausgeführt. Andernfalls wird standardmäßig ein No-Fast-Forward-Mergevorgang ausgeführt.

Eine Schnellweiterleitungszusammenführung kann niemals einen Zusammenführungskonflikt aufweisen, da Git keine Schnellweiterleitungszusammenführung anwendet, wenn sich der Tipp der Zielverzweigung von der Quellverzweigung unterscheidet. Standardmäßig verwendet Git einen schnellen Zusammenführungsvorgang, wenn möglich. Git wendet z. B. ein Fast-Forward-Merge auf einen lokalen Branch an, den Sie lediglich durch Pullen aus seinem entsprechenden Remotebranch aktualisieren.

Bei einem No-Fast-Forward-Merge wird ein neuer „Mergecommit“ des Zielbranchs generiert, der Änderungen im Quellbranch in Änderungen des Zielbranchs integriert. Die anwendbaren Änderungen sind die Änderungen, die nach dem letzten, für beide Branches gemeinsamen Commit vorgenommen wurden. Im vorherigen Diagramm ist Commit C der letzte gemeinsame Commit in beiden Verzweigungen. Wenn eine Änderung des Quellzweigs mit einer Änderung der Zielzweigung in Konflikt steht, werden Sie von Git aufgefordert, den Zusammenführungskonflikt zu beheben. Der Mergecommit (L) enthält die integrierten Quellbranch- und Zielbranchänderungen. Die Quell- und Zielbranchspitzen (K und E) sind die übergeordneten Elemente des Mergecommits. Im Commitverlauf Ihres Branchs ist ein Mergecommit ein nützlicher Marker für einen Mergevorgang, der deutlich zeigt, welche Branches zusammengeführt wurden.

Git rebase sequenziert die Commit-Historie des Ziel-Branches neu, sodass sie alle Commits des Quell-Branches enthält, gefolgt von allen Ziel-Branch-Commits seit dem letzten gemeinsamen Commit. Im vorherigen Diagramm ist Commit C der letzte gemeinsame Commit in beiden Verzweigungen. Eine weitere Möglichkeit dafür besteht darin, dass ein Rebasevorgang die Änderungen in Ihrem Zielbranch über dem Quellbranchverlauf wiederholt. Wenn eine Änderung des Quellzweigs mit einer Änderung der Zielzweigung in Konflikt steht, werden Sie von Git aufgefordert, den Zusammenführungskonflikt zu beheben. Wie beim Fast-Forward-Merge wird beim Rebase kein Mergecommit erstellt. Insbesondere ändert eine Rebasevorgang die Reihenfolge der vorhandenen Commits im Zielbranch, was bei den anderen Mergestrategien nicht der Fall ist. Im vorherigen Diagramm enthält commit K' die gleichen Änderungen wie K, verfügt aber über eine neue Commit-ID, da sie mit dem Commit E anstelle von C verknüpft wird.

Git merge und rebase verändern nur den Zielzweig – der Quellzweig bleibt unverändert. Wenn dabei ein Mergekonflikt auftritt, müssen Sie diesen auflösen, um den Merge- oder Rebasevorgang durchzuführen. Alternativ können Sie den Merge-/Rebasevorgang abbrechen und den Zielbranch in den vorherigen Zustand zurücksetzen.

Weitere Informationen zu Zusammenführungsoptionen und -strategien finden Sie im Git-Referenzhandbuch und den Git-Zusammenführungsstrategien.

Wann sollten Zusammenführungskonflikte gelöst werden?

Git merge und Git rebase werden häufig im Git-Workflow verwendet. Bei der Arbeit an einem lokalen Feature oder bugfix Branch ist es üblich, Folgendes zu beachten:

  1. Halten Sie Ihren lokalen main-Branch mit dem seinem entsprechenden Remoterepository auf dem aktuellen Stand, indem Sie regelmäßig pullen, um Remotecommits abzurufen und zusammenzuführen.
  2. Integrieren Sie lokale main-Branchaktualisierungen mit einem Rebase oder Merge in Ihren lokalen Featurebranch.
  3. Sichern Sie Ihre Arbeit im lokalen Featurebranch, indem Sie sie an den entsprechenden Remotebranch pushen.
  4. Erstellen Sie nach Fertigstellung des Features einen Pull Request, um den Remotefeaturebranch mit dem main-Remotebranch zusammenzuführen.

Indem Sie Remoteänderungen häufig in Ihr lokales Repository integrieren, können Sie über die jüngsten Arbeiten von anderen Personen auf dem Laufenden bleiben und auftretende Merge-Konflikte umgehend lösen.

Merge-Konflikte beheben

Der Prozess zum Auflösen von Zusammenführungskonflikten gilt sowohl für git merge als auch für git rebase. Obwohl die folgenden Schritte beschreiben, wie Zusammenführungskonflikte während einer Zusammenführung behoben werden, können Sie zusammenführungskonflikte während einer Neubasis auf ähnliche Weise lösen.

Tipp

Wenn es sich bei der Quellverzweigung um eine Remote-Tracking-Verzweigung handelt, stellen Sie sicher, dass die Verzweigung auf dem neuesten Stand ist, indem Sie vor einer Zusammenführung ein Git-Fetch ausführen. Oder führen Sie den Git pull-Befehl aus, der ein Git fetch mit einem Git merge kombiniert.

Visual Studio 2022 bietet eine Git-Versionskontrolle mithilfe des Git-Menüs , Git-Änderungen und über Kontextmenüs im Projektmappen-Explorer. Visual Studio 2019, Version 16.8, bietet auch die Git-Benutzeroberfläche des Team Explorers . Weitere Informationen finden Sie auf der Registerkarte "Visual Studio 2019 – Team Explorer ".

  1. Überprüfen Sie im Bereich "Verzweigungen " des Git-Repository-Fensters den Zielzweig. Klicken Sie dann mit der rechten Maustaste auf den Quellzweig und wählen Sie "Quellzweig< in >Zielzweig< zusammenführen>."

    Screenshot: Option „Mergen“ im Branchkontextmenü im Fenster „Git-Repository“ von Visual Studio.

  2. Visual Studio benachrichtigt Sie, wenn Git die Zusammenführung aufgrund von Konflikten angehalten hat. In diesem Fall können Sie entweder die Konflikte lösen oder die Zusammenführung abbrechen und zum Zustand vor der Zusammenführung zurückkehren. Im Abschnitt "Nicht zusammengeführte Änderungen " des Git Changes-Fensters werden die Dateien mit Zusammenführungskonflikten aufgelistet. Doppelklicken Sie bei einer Datei mit Zusammenführungskonflikten in ihrem Inhalt auf die Datei, um sie im Zusammenführungs-Editor zu öffnen.

    Screenshot der Dateien mit Zusammenführungskonflikten im Git Changes-Fenster von Visual Studio.

  3. Im Zusammenführungs-Editor wird der Bereich Eingehend die Version der Quellzweigdatei angezeigt, der Bereich Aktuell zeigt die Zielzweigdateiversion an, und im Ergebnis wird die resultierende Zusammenführungsdatei angezeigt. Wenn Sie bestimmte Quell- oder Zielzweigänderungen anwenden möchten, aktivieren Sie das Kontrollkästchen neben den konfliktierenden Zeilen, die Sie beibehalten möchten. Sie können direkt die Merge-Datei im Ergebnisbereich bearbeiten. Wählen Sie "Zusammenführen annehmen" , nachdem Sie alle Zusammenführungskonflikte in der aktuellen Datei behoben haben. Wiederholen Sie diesen Schritt für jede Datei mit Inhaltskonflikten.

    Screenshot des Zusammenführungs-Editors in Visual Studio.

  4. 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 des Kontextmenüs für eine konfliktierende Datei im Git-Fenster

  5. Geben Sie im Fenster „Git-Änderungen“ eine Commitnachricht ein, und wählen Sie Gestaffelt committen aus, um den Mergevorgang durchzuführen, nachdem Sie alle Mergekonflikte für alle Dateien behoben haben.

    Screenshot: Commitnachricht und Schaltfläche „Gestaffelt committen“ im Fenster „Git-Änderungen“ in Visual Studio.

Nächste Schritte