Delen via


Wijzigingen toepassen met rebase

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

Visual Studio 2019 | Visual Studio 2022

Git onderhoudt automatisch een geschiedenis van ontwikkeling op een vertakking door elke nieuwe doorvoering te koppelen aan zijn voorganger. Wanneer u de ene vertakking in een andere vertakking samenvoegt , kan de geschiedenis minder eenvoudig worden. Een no-fast-forward-samenvoeging combineert bijvoorbeeld uiteenlopende ontwikkelingslijnen door een samenvoegdoorvoering met meerdere voorafgaande taken te maken. Omgekeerd combineert een Git-rebase uiteenlopende ontwikkellijnen zonder een samenvoegingsdoorvoering te maken, wat resulteert in een eenvoudigere doorvoergeschiedenis, maar informatie over de samenvoeging verliest. Uw keuze voor het samenvoegingstype wordt waarschijnlijk beïnvloed door of u een record van de samenvoeging wilt behouden of de doorvoergeschiedenis wilt vereenvoudigen.

In dit artikel wordt besproken wanneer u een nieuwe basis gebruikt in plaats van een snelle samenvoeging en procedures biedt voor de volgende taken:

  • Uw lokale vertakking opnieuw baseeren
  • Uw lokale vertakking geforceerd pushen na een herbase
  • Interactieve rebase om lokale doorvoeringen te squashen

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

Uw lokale vertakking opnieuw baseeren

Git rebase integreert doorvoeringen vanuit een bronvertakking in uw huidige lokale vertakking (doelvertakking). De bronbranch blijft ongewijzigd. Ter vergelijking worden Git-rebase en andere samenvoegtypen weergegeven in het volgende diagram.

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

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. 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. Git wijzigt met name de volgorde van de bestaande doorvoeringen voor de doelvertakking, 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.

Als een bronvertakkingswijziging conflicteert met een doelvertakkingswijziging, wordt u door Git gevraagd om het samenvoegingsconflict op te lossen. U kunt samenvoegingsconflicten tijdens een herbasis oplossen op dezelfde manier als u samenvoegingsconflicten tijdens een samenvoeging oplost.

Rebase versus no-fast-forward merge

Git-rebasing resulteert in een eenvoudigere maar minder exacte doorvoergeschiedenis dan een niet-snelle samenvoeging, ook wel een drierichtings - of echte samenvoeging genoemd. Als u een record van een samenvoeging in de doorvoergeschiedenis wilt, gebruikt u een niet-snelle samenvoeging.

Als u de enige persoon bent die aan een functie- of bugfixvertakking werkt, kunt u overwegen een rebase te gebruiken om regelmatig recente main vertakkingen erin te integreren. Deze strategie helpt ervoor te zorgen dat u op de hoogte blijft van recent werk door anderen en onmiddellijk samenvoegingsconflicten oplost die zich voordoen. Door de basis te herstellen implementeert u uw nieuwe functie boven op het meest recente main vertakkingswerk, waarmee u een lineaire doorvoergeschiedenis kunt onderhouden.

Zie Rebase vs merge voor meer informatie over Git-rebase en wanneer u deze wilt gebruiken.

Richtlijnen voor rebase en force-push

Als u een lokale vertakking bent die u eerder hebt gepusht en vervolgens de standaard-Git-pushopdracht opnieuw uitvoert, mislukt de push. Met de standaard-Git-pushopdracht wordt een snelle samenvoegbewerking toegepast om uw lokale vertakking te integreren in de externe vertakking. Deze opdracht mislukt na een rebase omdat de rebase de volgorde van bestaande doorvoeringen in uw lokale doelvertakking wijzigt, zodat deze niet langer overeenkomt met de geschiedenis van de externe tegenhanger. In dit scenario slaagt een geforceerde push , door de externe vertakking te overschrijven.

Git rebase en force push zijn krachtige hulpprogramma's, maar houd rekening met deze richtlijnen bij het bepalen of ze moeten worden gebruikt:

  • Baseer geen lokale vertakking die met anderen is gepusht en gedeeld, tenzij u zeker weet dat niemand de gedeelde vertakking gebruikt. Na een nieuwe basis komt uw lokale vertakking niet meer overeen met de geschiedenis van de externe tegenhanger.
  • Forceer geen push naar een externe vertakking die door anderen wordt gebruikt, omdat hun lokale versie van de externe vertakking niet langer overeenkomt met de bijgewerkte geschiedenis van de externe vertakking.
  • Uw team moet akkoord gaan met de gebruiksscenario's voor het opnieuw baseren en geforceerd pushen.

Tip

Voor een gezamenlijk beoordelingsproces gebruikt u een pull-aanvraag om nieuw werk samen te voegen in de standaardvertakking van een externe opslagplaats.

Een nieuwe basis maken

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. Kies Git > Manage Branches om het venster Git-opslagplaats te openen.

    Schermopname van de optie Branches beheren in het Git-menu van Visual Studio.

  2. Klik in het venster Git-opslagplaats met de rechtermuisknop op de doelvertakking en selecteer Uitchecken.

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

  3. Klik met de rechtermuisknop op de bronvertakking en selecteer Rebase-doelvertakking> <op <de bronvertakking>.

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

  4. Visual Studio geeft een bevestigingsbericht weer na een geslaagde herbase.

    Schermopname van het bevestigingsbericht voor opnieuwbase in het venster Git-opslagplaats van Visual Studio.

    Als de rebase is gestopt vanwege samenvoegingsconflicten, ontvangt u een melding van Visual Studio. U kunt de conflicten oplossen of de rebase annuleren en terugkeren naar de status van de pre-rebase.

    Schermopname van het bericht rebaseconflict in het venster Git-opslagplaats van Visual Studio.

Uw lokale vertakking geforceerd pushen na een herbase

Als u een lokale vertakking bent die u eerder hebt gepusht, mislukt een volgende standaard-Git-push. In plaats daarvan kunt u afdwingen dat uw lokale vertakking de externe tegenhanger overschrijft, zodat hun doorvoergeschiedenissen overeenkomen.

Waarschuwing

Push nooit een vertakking waaraan anderen werken. Zie Rebase en pushrichtlijnen afdwingen voor meer informatie.

Als u push wilt afdwingen in Visual Studio, moet u eerst de optie voor geforceerde push inschakelen:

  1. Ga naar Opties voor broncodebeheer>voor Git>>Global Instellingen.

  2. Selecteer de optie Push --force-with-lease inschakelen.

De Git-pushvlag --force-with-lease is veiliger dan de --force vlag, omdat deze geen externe vertakking overschrijft die doorvoeringen bevat die niet zijn geïntegreerd in de lokale vertakking die u geforceerd pusht.

  1. Selecteer in het venster Git-wijzigingen de drukknop om uw doorvoer te pushen.

    Schermopname van de knop Pijl-omhoog in het venster Git Changes van Visual Studio.

    U kunt ook Push selecteren in het Git-menu.

    Schermopname van de optie Push in het Git-menu in Visual Studio.

  2. Als de standaard-Git-pushbewerking mislukt, start Visual Studio het dialoogvenster Git-Push mislukt . Kies Geforceerd pushen.

    Schermopname van het dialoogvenster Git-push is mislukt in Visual Studio.

  3. Visual Studio geeft een bevestigingsbericht weer na een geslaagde push.

    Schermopname van het pushbevestigingsbericht in Visual Studio.

Interactieve rebase om lokale doorvoeringen te squashen

Normaal gesproken maakt u tijdens het werken aan een nieuwe functie in uw lokale functiebranch meerdere doorvoeringen. Wanneer u klaar bent om de nieuwe functie te publiceren, kunt u deze doorvoeringen samenvoegen tot één doorvoering om de doorvoergeschiedenis te vereenvoudigen. U kunt een interactieve basis gebruiken om meerdere doorvoeringen in één doorvoering te verpletteren .

Visual Studio 2022 biedt geen ondersteuning voor interactieve rebasing. Gebruik in plaats daarvan de Git-opdrachtregel.

Notitie

Azure DevOps-gebruikers kunnen samenvoegen om de doorvoergeschiedenis van een onderwerpbranch tijdens een pull-aanvraag te beperken.

Volgende stappen