Samenvoegingsconflicten oplossen

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

Visual Studio 2019 | Visual Studio 2022

Wanneer u samenvoegt of opnieuw baseeert, vertelt u Git dat wijzigingen die in de ene vertakking zijn aangebracht, moeten worden geïntegreerd met wijzigingen die in een andere vertakking zijn aangebracht. 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.

Zie de zelfstudie Over Git-opslagplaatsen in Azure voor een overzicht van de Git-werkstroom.

Dit artikel bevat procedures voor de volgende taken:

  • Samenvoegingsconflicten begrijpen
  • Samenvoegingsconflicten oplossen

Samenvoegingsconflicten begrijpen

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

Diagram met de voor- en nadoorvoeringen bij het gebruik van Git-samenvoeging 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 standaardsamenvoegingstype geen snelle samenvoeging.

Een snelle samenvoeging kan nooit een samenvoegingsconflict hebben omdat Git geen fast-forward-samenvoeging toepast als de punt van de doelvertakking afwijkt 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.

Met een no-fast-forward-samenvoeging wordt een nieuwe doelvertakking 'doorvoer samenvoegen' gegenereerd waarmee wijzigingen in de bronvertakking worden geïntegreerd met wijzigingen 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 doorvoer C de laatste algemene doorvoering in beide vertakkingen. Als een bronvertakkingswijziging conflicteert met een doelvertakkingswijziging, wordt u door Git gevraagd het samenvoegingsconflict op te lossen. De samenvoegdoorvoering (L) bevat de geïntegreerde bronbranch en doelbranch. De bron- en doelvertakkingstips (K en E) zijn de ouders van de samenvoegingsdoorvoering. In de doorvoergeschiedenis van uw vertakking is een samenvoegingsdoorvoering een handige markering voor een samenvoegbewerking en wordt duidelijk weergegeven welke vertakkingen zijn samengevoegd.

Git rebase resequences de doorvoergeschiedenis van de doelvertakking zodat deze alle bronvertakking doorvoeringen bevat, gevolgd door alle doorvoeringen van de doelvertakking sinds de laatste algemene doorvoering. In het voorgaande diagram is doorvoer C de laatste algemene doorvoering in beide vertakkingen. 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 de snelle samenvoegbewerking maakt een rebase geen samenvoegdoorvoering. 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 en git-samenvoegstrategieën voor meer informatie over samenvoegopties en strategieën voor samenvoeging.

Wanneer samenvoegingsconflicten oplossen

Git-samenvoeging en Git-rebaseworden uitgebreid gebruikt in de Git-werkstroom. 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 vertakkingsupdates in uw lokale functievertakking met behulp van een nieuwe basis of samenvoeging.
  3. Maak een back-up van uw werk aan de lokale functievertakking door deze naar de bijbehorende externe vertakking 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 samenvoegbewerking kunt oplossen, kunt u op dezelfde manier samenvoegingsconflicten oplossen tijdens een herbase.

Tip

Als de bronvertakking een vertakking voor extern bijhouden is, moet u ervoor zorgen dat de vertakking up-to-date is door een Git-ophaalbewerking uit te voeren vóór een samenvoegbewerking. 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. Controleer in het deelvenster Vertakkingen van het venster Git-opslagplaats de doelbranch. Klik vervolgens met de rechtermuisknop op de bronvertakking en kies Bronvertakking samenvoegen 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-wijzigingen 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 wordt in het deelvenster Inkomend de versie van het bronbranchbestand weergegeven, in het deelvenster Huidig de versie van het doelbranchbestand en in het deelvenster Resultaat wordt het resulterende samenvoegbestand weergegeven. Als u specifieke wijzigingen in de bron- of doelvertakking wilt toepassen, schakelt u het selectievakje in naast de conflicterende regels die u wilt behouden. U kunt het samenvoegbestand ook rechtstreeks bewerken in het deelvenster Resultaat . Kies Samenvoegen accepteren 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. Voer in het venster Git-wijzigingen een doorvoerbericht in en kies Commit Staged om de samenvoegbewerking 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