Delen via


Samenvoegingsconflicten oplossen

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

Visual Studio 2019 | Visual Studio 2022

Wanneer u samenvoegt ofopnieuw baseert, geeft u Git de opdracht om wijzigingen in de ene branch te integreren met wijzigingen die zijn aangebracht in een andere branch. Vaak voltooit Git een samenvoeging of herbasis automatisch zonder uw hulp. Als Git echter detecteert dat een wijziging in de ene vertakking conflicteert met een wijziging die op een andere vertakking is aangebracht, wordt u gevraagd het conflict op te lossen. Er kan een samenvoegingsconflict optreden wanneer de samengevoegde vertakkingen dezelfde bestandslijn anders bewerken of wanneer een vertakking een bestand wijzigt en een andere vertakking het verwijdert. Het proces voor het oplossen van samenvoegingsconflicten is van toepassing op zowel Git-samenvoeging als rebase.

U kunt samenvoegingsconflicten in Visual Studio oplossen of met behulp van de opdrachtregel en elke teksteditor.

Voor een overzicht van de Git-werkstroom, zie de Azure Repos Git-zelfstudie.

Benodigdheden

Categorie Vereisten
Toegang tot het project Lid van een project.
toestemmingen - Code weergeven in privéprojecten: ten minste Basis toegang.
- Klonen of bijdragen aan code in privéprojecten: Lid van de Inzenders beveiligingsgroep of bijbehorende machtigingen in het project.
- Machtigingen voor een vertakking of opslagplaats instellen: Beheer Machtigingen machtigingen voor de vertakking of opslagplaats.
- Standaardtak wijzigen: beleid bewerken machtigingen voor de opslagplaats.
- Een opslagplaats importeren: Lid van de Projectbeheerders beveiligingsgroep of Git-projectniveau Opslagplaats maken machtiging ingesteld op Toestaan. Zie Machtigingen voor Git-opslagplaatsen instellen voor meer informatie.
Diensten Repositories ingeschakeld.
Gereedschappen Facultatief. Gebruik az repos opdrachten: Azure DevOps CLI.

Notitie

In openbare projecten hebben gebruikers met belanghebbende toegang volledige toegang tot Azure Repos, inclusief het bekijken, klonen en bijdragen aan code.

Categorie Vereisten
Toegang tot het project Lid van een project.
toestemmingen - Code weergeven: ten minste Basis toegang.
- Kloon of bijdragen aan code: Lid van de Inzenders beveiligingsgroep of bijbehorende machtigingen in het project.
Diensten Repositories ingeschakeld.

Samenvoegingsconflicten begrijpen

Git merge of rebase integreert doorvoeringen vanuit een bronvertakking in uw huidige lokale vertakking (doelvertakking). Git samenvoegen voert een fast-forward of een no-fast-forward samenvoeging uit. De no-fast-forward-samenvoeging wordt ook wel een drierichtings- samenvoegen of echte samenvoegen. Git rebase is een ander type samenvoeging. Deze samenvoegtypen worden weergegeven in het volgende diagram.

Diagram met de voor- en nadetoestanden bij het gebruik van Git merge en Git rebase.

Als voor Git-samenvoeging de punt van de doelvertakking bestaat in de bronvertakking, is het standaardsamenvoegingstype een snelle samenvoeging. Anders is het standaardsamenvoegtype een geen-fast-forward-samenvoeging.

Een fast-forward samenvoeging kan nooit een samenvoegingsconflict hebben omdat Git geen fast-forward samenvoeging toepast als het punt van de doelvertakking is afgeweken van de bronvertakking. Git maakt standaard gebruik van een snelle samenvoeging, indien mogelijk. Git past bijvoorbeeld een snelle samenvoeging toe op een lokale vertakking die u alleen bijwerkt door het ophalen van de externe tegenhangervertakking.

Een geen fast-forward merge genereert een nieuwe doelvertakking "merge commit" waarmee wijzigingen in de bronvertakking worden geïntegreerd met die in de doelvertakking. De toepasselijke wijzigingen zijn wijzigingen die zijn aangebracht na de laatste doorvoering die gebruikelijk is voor beide vertakkingen. In het voorgaande diagram is commit C de laatste gemeenschappelijke commit in beide takken. Als een bronvertakkingswijziging conflicteert met een doelvertakkingswijziging, wordt u door Git gevraagd het samenvoegingsconflict op te lossen. De samenvoegingscommits (L) bevat de geïntegreerde bronbranch- en doelbranch-wijzigingen. De bron- en doelvertakkingspunten (K en E) zijn de ouders van de samenvoegcommit. In de doorvoergeschiedenis van uw vertakking, is een samenvoegcommit een handige markering voor een samenvoegbewerking en geeft het duidelijk aan welke vertakkingen zijn samengevoegd.

Git rebase herschikt de commitgeschiedenis van de doelvertakking zodat het alle commits van de bronvertakking bevat, gevolgd door alle commits van de doelvertakking sinds de laatste gemeenschappelijke commit. In het voorgaande diagram is commit C de laatste gemeenschappelijke commit in beide takken. Een andere manier om het weer te geven, is dat een rebase de wijzigingen in uw doelvertakking opnieuw afspeelt boven op de geschiedenis van de bronvertakking. Als een bronvertakkingswijziging conflicteert met een doelvertakkingswijziging, wordt u door Git gevraagd het samenvoegingsconflict op te lossen. Net als bij een fast-forward merge, maakt een rebase geen merge commit. Met name een nieuwe basis wijzigt de volgorde van de bestaande doelvertakkingsdoorvoeringen, wat niet het geval is voor de andere samenvoegstrategieën. In het voorgaande diagram bevat doorvoer K dezelfde wijzigingen als K, maar heeft een nieuwe doorvoer-id omdat deze wordt gekoppeld aan doorvoeren E in plaats van C.

Git-samenvoeging en rebase wijzigen alleen de doelvertakking. De bronvertakking blijft ongewijzigd. Wanneer u een of meer samenvoegingsconflicten tegenkomt, moet u deze oplossen om de samenvoeging te voltooien of opnieuw tebaseen. U kunt ook de samenvoeg-/herbasisbewerking annuleren en de doelvertakking terugsturen naar de vorige status.

Zie de Git-referentiehandleiding voor en Git-samenvoegstrategieënvoor meer informatie over samenvoegopties en strategieën.

Wanneer samenvoegingsconflicten oplossen

Git merge en Git rebase worden uitgebreid gebruikt in de Git-workflow. Wanneer u werkt aan een lokale functie of bugfix-vertakking, is het gebruikelijk om het volgende te doen:

  1. Houd uw lokale main vertakking actueel met zijn externe tegenhanger door periodiek op te halen om externe doorvoeringen op te halen en samen te voegen.
  2. Integreer lokale main-branch-updates in uw lokale feature-branch met behulp van een rebase of merge.
  3. Maak een back-up van uw werk op de lokale functietak door deze naar de bijbehorende remote branch te pushen.
  4. Wanneer de functie is voltooid, maakt u een pull-aanvraag om uw externe functiebranch samen te voegen in de externe main vertakking.

Door regelmatig externe wijzigingen te integreren in uw lokale opslagplaats, kunt u op de hoogte blijven van recent werk van anderen en onmiddellijk samenvoegingsconflicten oplossen die zich voordoen.

Samenvoegingsconflicten oplossen

Het proces voor het oplossen van samenvoegingsconflicten is van toepassing op zowel Git-samenvoeging als Git-rebase. Hoewel in de volgende stappen wordt beschreven hoe u samenvoegingsconflicten tijdens een samenvoeging kunt oplossen, kunt u op dezelfde manier conflicten oplossen tijdens een rebasing.

Hint

Als de bronvertakking een externe tracering vertakking is, moet u ervoor zorgen dat de vertakking up-to-date is door een Git- op te halen voordat een samenvoegbewerking wordt uitgevoerd. U kunt ook de git-pull--opdracht uitvoeren, waarbij een Git-ophaalbewerking wordt gecombineerd met een Git-samenvoeging.

Visual Studio 2022 biedt een Git-versiebeheer met behulp van het Git-menu, Git-wijzigingen en via contextmenu's in Solution Explorer. Visual Studio 2019 versie 16.8 biedt ook de Git-gebruikersinterface van Team Explorer . Zie het tabblad Visual Studio 2019 - Team Explorer voor meer informatie.

  1. Check in het deelvenster Vertakkingen van het venster Git-opslagplaats de doelbranch uit. Klik vervolgens met de rechtermuisknop op de bronvertakking en kies samenvoegen <bronvertakking> in <doelvertakking>.

    Schermopname van de optie Samenvoegen in het contextmenu van de vertakking in het venster Git-opslagplaats van Visual Studio.

  2. Visual Studio geeft een melding als Git de samenvoeging heeft gestopt vanwege conflicten. In dat geval kunt u de conflicten oplossen of de samenvoeging annuleren en teruggaan naar de status vooraf samenvoegen. In de sectie Niet-samengevoegde wijzigingen van het venster Git Changes worden de bestanden met samenvoegingsconflicten weergegeven. Dubbelklik voor een bestand met samenvoegingsconflicten in de inhoud ervan op het bestand om het te openen in de samenvoegeditor.

    Schermopname van de bestanden met samenvoegingsconflicten in het venster Git Changes van Visual Studio.

  3. In de samenvoegeditor toont het deelvenster binnenkomende de versie van het bronbranchbestand, het deelvenster Huidige de versie van het doelbranchbestand. In het deelvenster Resultaat wordt het resulterende samenvoegbestand weergegeven. Als u wijzigingen in de bron- of doelvertakking wilt toepassen, selecteer het vakje naast de conflicterende lijnen die u wilt behouden. U kunt het samenvoegbestand ook rechtstreeks bewerken in het deelvenster Resultaat. Kies Accepteer Samenvoegen nadat u alle samenvoegingsconflicten in het huidige bestand hebt opgelost. Herhaal deze stap voor elk bestand met inhoudsconflicten.

    Schermopname van de samenvoegeditor in Visual Studio.

  4. Voor een bestand dat in de ene vertakking is bewerkt en in de andere vertakking is verwijderd, klikt u met de rechtermuisknop op het bestand en selecteert u welke vertakkingsactie u wilt.

    Schermopname van het contextmenu voor een conflicterend bestand in het venster Git Changes van Visual Studio.

  5. In het venster Git-wijzigingen voert u een commitbericht in en kiest u commit gefaseerde wijzigingen om de samenvoeging te voltooien, nadat u alle samenvoegingsconflicten voor alle bestanden hebt opgelost.

    Schermopname van het doorvoerbericht en de knop Gefaseerd doorvoeren in het venster Git-wijzigingen van Visual Studio.

Volgende stappen