Freigeben über


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.
- Verzweigungs- oder Repository-Berechtigungen festlegen: "Berechtigungen verwalten" sind Berechtigungen für die Verzweigung oder das Repository.
- Standard-Branch ändern: Bearbeitungsrichtlinien sind Berechtigungen für das Repository.
- Importieren eines Repositorys: Mitglied der Sicherheitsgruppe "Projektadministratoren" oder Git-Projektebene-Berechtigung "Repository erstellen" auf "Zulassen" gesetzt. Weitere Informationen finden Sie unter Festlegen von Git-Repositoryberechtigungen.
Dienste Repos aktiviert.
Werkzeuge Wahlfrei. Verwenden Sie az repos Befehle: Azure DevOps CLI.

Hinweis

In öffentlichen Projekten haben Benutzer mit Stakeholder-Zugriff vollzugriff auf Azure Repos, einschließlich Anzeigen, Klonen und Beitragen zu Code.

Kategorie Anforderungen
Projektzugriff Mitglied eines Projekts.
Erlaubnisse - Code anzeigen: Mindestens einfacher Zugriff.
- Klonen oder Zum Code beitragen: Mitglied der Sicherheitsgruppe "Mitwirkende " oder entsprechende Berechtigungen im Projekt.
Dienste Repos aktiviert.

Verständnis von Zusammenführungskonflikten

Git merge oder rebase integriert Commits von einem Quell-Branch in Ihren aktuellen lokalen Branch (Ziel-Branch). Git merge führt entweder eine fast-forward oder eine no-fast-forward Zusammenführung aus. Der Drei-Wege-Zusammenführung oder True Merge wird auch als Zusammenführung ohne Fast-Forward 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 Zielbranch im Quellbranch vorhanden ist, wird der Standard-Mergetyp ein Fast-Forward-Merge sein. Andernfalls ist der Standard-Merge-Typ ein Kein-Fast-Forward-Merge.

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. einen Fast-Forward-Merge auf einen lokalen Branch an, den Sie nur aktualisieren, indem Sie die Änderungen von dessen entferntem Gegenpart holen.

Bei einem kein Fast-Forward-Merge wird ein neuer "Merge Commit" für den Ziel-Branch generiert, der die Änderungen des Quell-Branches mit den Änderungen des Ziel-Branches integriert. Die anwendbaren Änderungen sind diejenigen, die nach dem letzten Commit vorgenommen wurden, der beiden Zweigen gemeinsam ist. 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 Zusammenführungs-Commit (L) enthält die Änderungen der integrierten Quell- und Zielzweige. Die Quell- und Zielzweigtipps (K und E) sind die übergeordneten Elemente des Zusammenführungs-Commits. Im Commitverlauf Ihres Branches dient ein Zusammenführungs-Commit als nützlicher Marker für einen Zusammenführungsvorgang und zeigt eindeutig, 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, es zu betrachten, ist, dass ein Rebase die Änderungen in Ihrer Zielverzweigung auf den Verlauf des Quellzweigs anwendet. Wenn eine Änderung des Quellzweigs mit einer Änderung der Zielzweigung in Konflikt steht, werden Sie von Git aufgefordert, den Zusammenführungskonflikt zu beheben. Wie bei dem Fast-Forward-Merge erstellt ein Rebase keinen Zusammenführungs-Commit. Insbesondere ändert eine Neubasis die Reihenfolge der vorhandenen Zielverzweigungs-Commits, was nicht für die anderen Zusammenführungsstrategien 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 Sie auf einen oder mehrere Merge-Konflikte stoßen, müssen Sie sie auflösen, um die Zusammenführung abzuschließen oder zu rebasen. Alternativ können Sie den Zusammenführungs-/Neubasisvorgang abbrechen und die Zielverzweigung an den vorherigen Zustand zurückgeben.

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 Ihre lokale main Verzweigung mit ihrem Remote-Gegenstück aktuell, indem Sie regelmäßig pullen, um Remote-Commits zu holen und zusammenzuführen.
  2. main Integrieren Sie lokale Verzweigungsupdates in Ihre lokale Featureverzweigung mithilfe einer Neubasis oder Zusammenführung.
  3. Sichern Sie Ihre Arbeit am lokalen Feature-Branch, indem Sie ihn an den entsprechenden Remote-Branch pushen.
  4. Erstellen Sie nach Abschluss des Features einen Pull-Request, um Ihren Remotefeature-Branch in den Remote-Branch main 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 der Option

  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 Commit-Nachricht ein, und wählen Sie Änderungen übernehmen aus, um die Zusammenführung abzuschließen, nachdem Sie alle Zusammenführungskonflikte für alle Dateien gelöst haben.

    Screenshot der Commit-Nachricht und der Schaltfläche

Nächste Schritte