Lösa sammanslagningskonflikter
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
När du sammanfogar eller ombaseras uppmanar du Git att integrera ändringar som gjorts på en gren med ändringar som gjorts på en annan. Ofta slutför Git en sammanslagning eller ombaserar automatiskt utan din hjälp. Men om Git upptäcker att en ändring som görs på en gren står i konflikt med en ändring som gjorts på en annan, uppmanas du att lösa konflikten. En sammanslagningskonflikt kan uppstå när de sammanfogade grenarna redigerar samma filrad på ett annat sätt, eller när en gren ändrar en fil och en annan gren tar bort den. Processen för att lösa sammanslagningskonflikter gäller för både Git-sammanslagning och ombasering.
Du kan lösa sammanslagningskonflikter i Visual Studio eller med hjälp av kommandoraden och valfri textredigerare.
En översikt över Git-arbetsflödet finns i Självstudie om Azure Repos Git.
Den här artikeln innehåller procedurer för följande uppgifter:
- Förstå sammanslagningskonflikter
- Lösa sammanslagningskonflikter
Förstå sammanslagningskonflikter
Git-sammanslagning eller ombasering integrerar incheckningar från en källgren i din aktuella lokala gren (målgren). Git-sammanslagning utför antingen en snabbsnabb eller en snabbsnabb koppling. Den snabbsnabba sammanfogningen kallas även för en trevägssammanslagning eller sann sammanslagning. Git-ombasering är en annan typ av sammanslagning. Dessa sammanslagningstyper visas i följande diagram.
Om spetsen på målgrenen finns i källgrenen för Git-sammanslagning är standardsammanfogningstypen en snabbkoppling. Annars är standardsammanslagningstypen en snabbsnabb koppling.
En snabbspäckad sammanslagning kan aldrig ha en sammanslagningskonflikt eftersom Git inte tillämpar en snabbkoppling om spetsen på målgrenen har avvikande från källgrenen. Som standard använder Git en snabbkoppling när det är möjligt. Git tillämpar till exempel en snabbspolning på en lokal gren som du bara uppdaterar genom att hämta från dess fjärrmotsvarighetsgren.
En snabbsnabb sammanslagning genererar en ny målgren som integrerar ändringar i källgrenen med ändringar i målgrenen. De tillämpliga ändringarna är de som görs efter den senaste incheckningen som är gemensam för båda grenarna. I föregående diagram är commit C den sista gemensamma incheckningen i båda grenarna. Om någon ändring av källgrenen står i konflikt med någon ändring av målgrenen uppmanar Git dig att lösa sammanslagningskonflikten. Sammanslagningsincheckningen (L) innehåller ändringarna för den integrerade källgrenen och målgrenen. Tipsen för käll- och målgrenen (K och E) är överordnade för sammanslagningsincheckningen. I grenens incheckningshistorik är en sammanslagningsincheckning en användbar markör för en sammanslagningsåtgärd och visar tydligt vilka grenar som sammanfogades.
Git återställer incheckningshistoriken för målgrenen så att den innehåller alla källgrens incheckningar, följt av alla incheckningar av målgrenar sedan den senaste gemensamma incheckningen. I föregående diagram är commit C den sista gemensamma incheckningen i båda grenarna. Ett annat sätt att visa det är att en ombas spelar upp ändringarna i målgrenen ovanpå källgrenens historik. Om någon ändring av källgrenen står i konflikt med någon ändring av målgrenen uppmanar Git dig att lösa sammanslagningskonflikten. Precis som med snabbkopplingen skapar en ombas inte en sammanslagningsincheckning. I synnerhet ändrar en ombas sekvensen för de befintliga incheckningarna för målgrenen, vilket inte är fallet för de andra sammanslagningsstrategierna. I föregående diagram innehåller commit K samma ändringar som K, men har ett nytt inchecknings-ID eftersom det länkar tillbaka till incheckningen E i stället för C.
Git-sammanslagning och ombasering ändrar endast målgrenen – källgrenen förblir oförändrad. När du stöter på en eller flera sammanslagningskonflikter måste du lösa dem för att slutföra sammanslagningen eller ombaseras. Eller så kan du avbryta åtgärden merge/rebase och returnera målgrenen till dess tidigare tillstånd.
Mer information om sammanslagningsalternativ och strategier finns i Git-referenshandboken och Git-sammanslagningsstrategier.
När du ska lösa sammanslagningskonflikter
Git-sammanslagning och Git-ombasering används i stor utsträckning i Git-arbetsflödet. När du arbetar med en lokal funktion eller en bugfix-gren är det vanligt att:
- Håll din lokala
main
gren aktuell med fjärrmotsvarigheten genom att regelbundet hämta och sammanfoga fjärrincheckningar. - Integrera lokala
main
grenuppdateringar i din lokala funktionsgren med hjälp av en ombasering eller sammanslagning. - Säkerhetskopiera ditt arbete på den lokala funktionsgrenen genom att skicka det till motsvarande fjärrgren.
- När funktionen är klar skapar du en pull-begäran för att sammanfoga fjärrfunktionsgrenen till fjärrgrenen
main
.
Genom att ofta integrera fjärrändringar i din lokala lagringsplats kan du vara medveten om andras senaste arbete och snabbt lösa eventuella sammanslagningskonflikter som uppstår.
Lösa sammanslagningskonflikter
Processen för att lösa sammanslagningskonflikter gäller för både Git-sammanslagning och Git-ombasering. Även om följande steg beskriver hur du löser sammanslagningskonflikter under en sammanslagning kan du på liknande sätt lösa sammanslagningskonflikter under en ombasering.
Dricks
Om källgrenen är en fjärrspårningsgren kontrollerar du att grenen är uppdaterad genom att köra en Git-hämtning före en sammanslagning. Eller kör git-pull-kommandot, som kombinerar en Git-hämtning med en Git-sammanslagning.
Visual Studio 2022 tillhandahåller en Git-versionskontroll med hjälp av Git-menyn , Git-ändringar och snabbmenyer i Solution Explorer. Visual Studio 2019 version 16.8 erbjuder även Användargränssnittet för Team Explorer Git. Mer information finns på fliken Visual Studio 2019 – Team Explorer .
I fönstret Grenar i Git-lagringsplatsen checkar du ut målgrenen. Högerklicka sedan på källgrenen och välj Sammanfoga källgren> till <målgren>.<
Visual Studio meddelar dig om Git stoppade sammanfogningen på grund av konflikter. I så fall kan du antingen lösa konflikterna eller avbryta sammanfogningen och återgå till tillståndet före sammanfogningen. I avsnittet Unmerged Changes i fönstret Git-ändringar visas filerna med sammanslagningskonflikter. För en fil med sammanslagningskonflikter i innehållet dubbelklickar du på filen för att öppna den i kopplingsredigeraren.
I kopplingsredigeraren visar fönstret Inkommande källgrensfilversionen, fönstret Aktuell visar målfilversionen för grenen och fönstret Resultat visar den resulterande sammanslagningsfilen. Om du vill tillämpa specifika ändringar av käll- eller målgrenen markerar du kryssrutan bredvid de motstridiga rader som du vill behålla. Du kan också redigera kopplingsfilen direkt i fönstret Resultat . Välj Acceptera sammanslagning när du har löst alla sammanslagningskonflikter i den aktuella filen. Upprepa det här steget för varje fil med innehållskonflikter.
För en fil som redigerades i en gren och togs bort i den andra högerklickar du på filen och väljer vilken grenåtgärd du vill använda.
I fönstret Git-ändringar anger du ett incheckningsmeddelande och väljer Checka in mellanlagrat för att slutföra kopplingen – när du har löst alla sammanslagningskonflikter för alla filer.