Tillämpa ändringar med ombasering
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Git upprätthåller automatiskt en utvecklingshistorik för en gren genom att länka varje ny incheckning till sin föregångare. När du sammanfogar en gren till en annan kan historiken bli mindre enkel. Till exempel kombinerar en snabbsnabb koppling olika utvecklingslinjer genom att skapa en sammanslagning med flera föregående. På motsvarande sätt kombinerar en Git-ombas olika utvecklingslinjer utan att skapa en sammanslagningsincheckning, vilket resulterar i en enklare incheckningshistorik men förlorar information om sammanfogningen. Ditt val av sammanslagningstyp påverkas troligen av om du vill bevara en post för sammanfogningen eller förenkla incheckningshistoriken.
Den här artikeln beskriver när du ska använda en rebase i stället för en snabbsnabb sammanslagning och innehåller procedurer för följande uppgifter:
- Ändra bas på din lokala gren
- Tvinga fram push-överföring av din lokala gren efter en ombasering
- Interaktiv ombasering för att krossa lokala incheckningar
En översikt över Git-arbetsflödet finns i Självstudie om Azure Repos Git.
Ändra bas på din lokala gren
Git-ombaseringen integrerar incheckningar från en källgren i din aktuella lokala gren (målgren). Källgrenen förblir oförändrad. Som jämförelse visas Git-ombasering och andra sammanslagningstyper i följande diagram.
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. Ett annat sätt att visa det är att en ombas spelar upp ändringarna i målgrenen ovanpå källgrenens historik. Git ändrar i synnerhet 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.
Om en ändring av källgrenen står i konflikt med en ändring av målgrenen under en ombasering, uppmanar Git dig att lösa sammanslagningskonflikten. Du kan lösa sammanslagningskonflikter under en ombasering på samma sätt som du löser sammanslagningskonflikter under en sammanslagning.
Rebase kontra no-fast-forward merge
Git-ombasering resulterar i en enklare men mindre exakt incheckningshistorik än en snabbsnabb sammanslagning , även kallad en trevägs - eller sann sammanslagning. När du vill ha en post för en sammanslagning i incheckningshistoriken använder du en snabbsnabb koppling.
Om du är den enda som arbetar med en funktion eller en bugfix-gren kan du överväga att använda en ombas för att regelbundet integrera det senaste main
grenarbetet i den. Den här strategin hjälper dig att hålla dig medveten om andras senaste arbete och snabbt lösa eventuella sammanslagningskonflikter som uppstår. Genom att ombasera implementerar du den nya funktionen ovanpå det senaste main
grenarbetet, som hjälper till att upprätthålla en linjär incheckningshistorik.
Mer information om Git-ombasering och när du ska använda den finns i Rebase vs merge.
Ändra bas och framtvinga push-riktlinjer
Om du har ombaserat en lokal gren som du tidigare har push-överfört och sedan kör git push-standardkommandot igen misslyckas push-överföringen. Standardkommandot för Git-push tillämpar en snabbkoppling för att integrera din lokala gren i fjärrgrenen. Kommandot misslyckas efter en ombasering eftersom ombasen ändrar sekvensen av befintliga incheckningar i din lokala målgren, så att den inte längre matchar historiken för dess fjärrmotsvarighet. I det här scenariot lyckas en framtvinging – genom att skriva över fjärrgrenen.
Git-rebase och force push är kraftfulla verktyg, men tänk på dessa riktlinjer när du bestämmer dig för om du vill använda dem:
- Ombaseras inte en lokal gren som har push-överförts och delats med andra, såvida du inte är säker på att ingen använder den delade grenen. Efter en ombasering matchar din lokala gren inte längre historiken för dess fjärrmotsvarighet.
- Tvinga inte push-överföring till en fjärrgren som används av andra, eftersom deras lokala version av fjärrgrenen inte längre matchar den uppdaterade fjärrgrenshistoriken.
- Ditt team bör komma överens om användningsscenarier för ombasering och framtvinga push-överföring.
Dricks
För en samarbetsgranskningsprocess använder du en pull-begäran för att sammanfoga nytt arbete till standardgrenen för en fjärrlagringsplats.
Så här gör du en ombasering
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 .
Välj Git > Hantera grenar för att öppna fönstret Git-lagringsplats .
I fönstret Git-lagringsplats högerklickar du på målgrenen och väljer Checkout.
Högerklicka på källgrenen och välj Rebase target-branch> till <source-branch>.<
Visual Studio visar ett bekräftelsemeddelande efter en lyckad ombasering.
Om ombasen stoppas på grund av sammanslagningskonflikter meddelar Visual Studio dig. Du kan antingen lösa konflikterna eller avbryta ombasen och återgå till förbaseringstillståndet.
Tvinga fram push-överföring av din lokala gren efter en ombasering
Om du har ombaserat en lokal gren som du tidigare har push-överfört misslyckas en efterföljande Git-push-standard. I stället kan du tvinga den lokala grenen att skriva över dess fjärrmotsvarighet så att deras incheckningshistorik matchar.
Varning
Tvinga aldrig fram en gren som andra arbetar med. Mer information finns i Ändra bas och framtvinga push-riktlinjer.
Om du vill framtvinga push-överföring i Visual Studio måste du först aktivera alternativet force push:
Gå till Verktyg>alternativ>Källkontroll>Git Global Inställningar.
Välj alternativet Aktivera push --force-with-lease.
Git-push-flaggan --force-with-lease
är säkrare än flaggan eftersom den --force
inte skriver över en fjärrgren som har incheckningar som inte är integrerade i den lokala gren som du tvingar fram push-överföring.
I fönstret Git-ändringar väljer du push-knappen för att push-överföra incheckningen.
Eller så kan du välja Push på Git-menyn .
Om standardåtgärden för Git-push misslyckas startar Visual Studio dialogrutan Git-Push misslyckades . Välj Framtvinga push.
Visual Studio visar ett bekräftelsemeddelande efter en lyckad push-överföring.
Interaktiv ombasering för att krossa lokala incheckningar
När du arbetar med en ny funktion i din lokala funktionsgren skapar du vanligtvis flera incheckningar. När du är redo att publicera den nya funktionen kanske du vill konsolidera incheckningarna till en enda incheckning för att förenkla incheckningshistoriken. Du kan använda en interaktiv ombas för att krossa flera incheckningar i en enda incheckning.
Visual Studio 2022 stöder inte interaktiv ombasering. Använd Git-kommandoraden i stället.
Kommentar
Azure DevOps-användare kan krossa sammanslagning för att komprimera incheckningshistoriken för en ämnesgren under en pull-begäran.