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 branch door elke nieuwe commit 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 merge combineert bijvoorbeeld uiteenlopende ontwikkelingslijnen door een samenvoegcommit met meerdere voorgangers 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:

  • Herbaseer uw lokale branch
  • Uw lokale vertakking geforceerd pushen na een herbase
  • Interactieve rebase om lokale doorvoeringen te squashen

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

Vereiste voorwaarden

Categorie Vereisten
Toegang tot het project Lid van een project.
toestemmingen - Code weergeven in privéprojecten: ten minste Basic toegang.
- Klonen of bijdragen aan code in privéprojecten: Lid van de Inzenders beveiligingsgroep of bijbehorende machtigingen in het project.
- Machtigingen voor tak of opslagplaats instellen: Machtigingen beheren machtigingen voor de tak 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.
Services Repositories ingeschakeld.
Gereedschappen Facultatief. Gebruik az repos opdrachten: Azure DevOps CLI.

Opmerking

In openbare projecten hebben gebruikers met Stakeholder volledige toegang tot Azure Repos, waaronder het weergeven, klonen en bijdragen aan code.

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

Uw lokale vertakking opnieuw baseeren

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

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

Git rebase herstelt de volgorde van de doorvoeringen in de doelvertakking, zodat deze alle doorvoeringen van de bronvertakking bevat, gevolgd door alle doorvoeringen van de doelvertakking sinds de laatste gemeenschappelijke 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 rebase wijzigt met name de volgorde van de bestaande commits in de doelvertakking, wat niet het geval is bij 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 rebase op dezelfde manier oplossen als u samenvoegingsconflicten tijdens een merge oplost.

Rebase versus geen-snelle-doorvoer samenvoeging

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 waarop u eerder een rebase hebt uitgevoerd opnieuw probeert te pushen met de standaard Git-pushopdracht, zal de push niet slagen. Met de standaard-Git-pushopdracht wordt een snelle samenvoegbewerking toegepast om uw lokale vertakking te integreren in de externe vertakking. Deze opdracht zal falen na een rebase omdat de rebase de volgorde van bestaande commits in uw lokale doelvertakking wijzigt, waardoor deze niet langer overeenkomt met de geschiedenis van zijn 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:

  • Herbaseer geen lokale vertakking die met anderen is gedeeld en gepusht, tenzij u zeker weet dat niemand de gedeelde vertakking gebruikt. Na een rebase komt uw lokale branch niet meer overeen met de geschiedenis van de externe branch.
  • Voer geen force push uit naar een externe vertakking die door anderen wordt gebruikt, omdat hun lokale versie van die externe vertakking niet langer overeenkomt met de aangepaste geschiedenis van de externe vertakking.
  • Uw team moet overeenstemming bereiken over de gebruiksscenario's voor rebase en geforceerde push.

Hint

Voor een gezamenlijk beoordelingsproces gebruikt u een pull request om nieuw werk te mergen in de hoofdvertakking van een remote repo.

De basis opnieuw instellen

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 branch in het venster Git Repository 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 een vertakking in het venster Git-opslagplaats van Visual Studio.

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

    Screenshot van het bevestigingsbericht voor rebase in het venster Git-repository 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 tak forceren te pushen na een rebase

Als u een lokale tak hebt teruggezet die u eerder hebt gepusht, zal een volgende standaard-Git-push mislukken. In plaats daarvan kunt u een geforceerde push doen van uw lokale vertakking om de externe tegenhanger te overschrijven, zodat hun commit-geschiedenissen 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 hulpprogramma's>>broncodebeheer>algemene git-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.

    Schermafbeelding van de Pijl-omhoogknop 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 nieuw kenmerk in uw lokale feature-branch meerdere commits. 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 rebase gebruiken om meerdere commits samen te squashen tot één commit.

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

Opmerking

Azure DevOps-gebruikers kunnen squash samenvoegen om de commitgeschiedenis van een onderwerptak tijdens een pull-verzoek te comprimeren.

Volgende stappen