Delen via


Strategieën samenvoegen en squash samenvoegen

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

Wanneer u een pull-aanvraag voltooit, voegt u de onderwerpbranch meestal mainsamen in uw standaardbranch. Met deze samenvoeging worden de doorvoeringen van de onderwerpvertakking toegevoegd aan uw hoofdvertakking en wordt een samenvoegingsdoorvoering gemaakt om conflicten tussen de standaardvertakking en de onderwerpvertakking af te stemmen. De opmerkingen en discussie in de pull-aanvraag geven aanvullende context voor de wijzigingen die in de onderwerpbranch zijn aangebracht.

Voorbeeld van een reguliere samenvoeging vanuit een pull-aanvraag.

De doorvoergeschiedenis van uw main vertakking (of een andere standaardvertakking) volgt geen rechte lijn vanwege de gerelateerde onderwerpvertakkingsgeschiedenis. Naarmate een project groter wordt, neemt het aantal onderwerpvertakkingen tegelijkertijd toe, waardoor de standaardvertakkingsgeschiedenis steeds moeilijker te volgen is.

De standaardbranch is een nauwkeurige weergave van de geschiedenis van elke onderwerpbranch, maar het is moeilijk om bredere vragen over de ontwikkeling van uw project te beantwoorden.

Squash samenvoegen

Squash samenvoegen is een samenvoegoptie waarmee u de Git-geschiedenis van onderwerpbranches kunt verkorten wanneer u een pull-aanvraag voltooit. In plaats van elke doorvoering op de onderwerpbranch die wordt toegevoegd aan de geschiedenis van de standaardbranch, voegt een squashsamenvoeging alle bestandswijzigingen toe aan één nieuwe doorvoering op de standaardbranch. Squash merge commit heeft geen verwijzing naar de onderwerpbranch, het produceert een nieuwe doorvoering die alle wijzigingen van de onderwerpbranch bevat. Bovendien wordt aanbevolen om de onderwerpvertakking te verwijderen om verwarring te voorkomen.

Diagram van het samenvoegen van pull-aanvragen in Azure-opslagplaatsen.

Een eenvoudige manier om hierover na te denken is dat squash samenvoegen u alleen de bestandswijzigingen geeft en een normale samenvoeging u de bestandswijzigingen en de doorvoergeschiedenis geeft.

Hoe is een squashsamenvoeging nuttig?

Het samenvoegen van squash zorgt ervoor dat uw standaardvertakkingsgeschiedenissen schoon en eenvoudig te volgen zijn zonder dat u werkstroomwijzigingen in uw team hoeft te eisen. Inzenders van de onderwerpbranch werken zoals ze willen in de onderwerpbranch en de standaard vertakkingen houden een lineaire geschiedenis bij door het gebruik van squashsamenvoegingen. De doorvoergeschiedenis van een main vertakking die is bijgewerkt met squashsamenvoegingen, heeft één doorvoering voor elke samengevoegde vertakking. U kunt deze geschiedenis doorlopen om precies te achterhalen wanneer het werk is voltooid.

Overwegingen bij samenvoeging

Het samenvoegen van samenvoeging verkort de geschiedenis van wijzigingen in uw standaardbranch, dus het is belangrijk om samen te werken met uw team om te bepalen wanneer u samenvoegt of wanneer u de volledige doorvoergeschiedenis van een onderwerpbranch wilt behouden. Bij het samenvoegen van squash is het een goed idee om de bronbranch te verwijderen. Als u de bronvertakking verwijdert, voorkomt u verwarring omdat de onderwerpvertakking zelf geen doorvoer heeft die deze samenvoegt in de standaardvertakking.

Pull-aanvragen voltooien met squash samenvoegen

U kunt ervoor kiezen om samen te voegen bij het voltooien van een pull-aanvraag in Azure-opslagplaatsen.

Kies Squash doorvoeren onder Samenvoegingstype in het dialoogvenster Volledige pull-aanvraag om de onderwerpbranch samen te voegen.

Schermopname van het sluiten van een pull-aanvraag met een squashsamenvoeging in Azure-opslagplaatsen.

Meerdere samenvoegingsbasissen

Op het tabblad Bestanden in een pull-aanvraag worden verschillen gedetecteerd door een vergelijking van drie zijden. Het algoritme houdt rekening met de laatste doorvoering in de doelbranch, de laatste doorvoering in de bronbranch en hun algemene samenvoegingsbasis (de beste gemeenschappelijke voorouder). Het algoritme is een snelle, kostenefficiënte en betrouwbare methode voor het detecteren van wijzigingen. Helaas is er in sommige gevallen meer dan één echte basis. In de meeste opslagplaatsen is deze situatie zeldzaam, maar in grote opslagplaatsen met veel actieve gebruikers kan dit gebruikelijk zijn. U kunt handmatig controleren of er meerdere samenvoegbasissen tussen de vertakkingen bestaan. Voer hiervoor de opdracht uit git merge-base --all feature master . Azure DevOps detecteert het bestaan van meerdere samenvoegingsbasissen voor elke pull-aanvraag. Wanneer deze worden gedetecteerd, wordt in Azure DevOps het bericht 'Meerdere samenvoegbases gedetecteerd' weergegeven. De weergegeven lijst met doorvoeringen kan onvolledig zijn voor de pull-aanvraag. Azure DevOps voert de detectie van meerdere samenvoegdatabases uit, maar controleert niet of de mogelijke samenvoegingsbasis al is samengevoegd of niet. Een dergelijke controle wordt uitgevoerd door git merge-base. Daarom kan in Azure DevOps het bericht worden weergegeven, zelfs wanneer git merge-base slechts één samenvoegbasis wordt gerapporteerd.

Notitie

Als u tijdens een pull-aanvraagbeoordeling wijzigingen hebt verloren, moet u ervoor zorgen dat meerdere samenvoegbases niet de hoofdoorzaak zijn.

De volgende scenario's worden door Azure DevOps gedetecteerd als meerdere bases (de samenvoegdatabases worden aangegeven door nummer 1 en 2):

  • Kruislings samenvoegen (ook wel bekend als een criss-cross) tussen verschillende vertakkingen (gerapporteerd door Azure DevOps en git merge-base)
---1---o---A
    \ /
     X
    / \
---2---o---o---B
  • Samenvoegen van de ene vertakking naar de andere twee (gerapporteerd door Azure DevOps, maar niet door git merge-base dat elimineert de samenvoegbasis 2)
---1---o---o---o---A
    \         /
     \-------2
      \       \
       \---o---o---o---B
  • Nasleepbewerkingen van hoofdvertakkingen herstellen, bijvoorbeeld het wijzigen van de samenvoegdoorvoering
*   42bb2d2 (HEAD, A) Amended merge commit
|\  
| | *   67c9bb8 (other) Merge branch 'A' into B
| | |\  
| |/ /  
|/| /   
| |/    
| * fa78e32 add second commit
* | 15845c9 add first commit
|/  
* 6a52130 add init
  • Actief hergebruik van functiebranches
  • Andere niet-intuïtieve en convoluted manipulaties met terugdraaien, kersenkiezen en samenvoegingen

Detectie van meerdere samenvoegingsbasis maakt deel uit van het beveiligingsbewustzijn. Als er meerdere samenvoegingsbasissen zijn, detecteert het algoritme voor bestandsverschil voor de gebruikersinterface mogelijk geen bestandswijzigingen, afhankelijk van de gekozen samenvoegingsbasis. Als de bestanden in de pull-aanvraag verschillende versies hebben tussen de samenvoegbases, treedt er een waarschuwing voor meerdere samenvoegingsbasissen op.

Raadpleeg de officiële Git-documentatie voor meer informatie.

Mogelijke beveiligingsrisico's voor het samenvoegen van meerdere bases

  • Een kwaadwillende gebruiker kan het UI-algoritme misbruiken om schadelijke wijzigingen door te voeren die niet aanwezig zijn in de pull-aanvraag.
  • Als wijzigingen die in de pull-aanvraag worden voorgesteld, zich al in de doelvertakking bevinden, worden ze weergegeven op het tabblad Bestanden , maar activeren ze mogelijk geen vertakkingsbeleid dat is toegewezen aan mapwijzigingen.
  • Er zijn mogelijk geen twee sets wijzigingen in dezelfde bestanden van meerdere samenvoegingsbasissen aanwezig in de pull-aanvraag. In dat geval kunnen er verraderlijke logische hiaten ontstaan.

Probleem met meerdere samenvoegbases oplossen

Het hebben van meerdere samenvoegingsbasissen is niet per se slecht, maar u moet controleren of alles goed is. Als u meerdere samenvoegingsbasissen wilt verwijderen, koppelt u de vertakkingen aan één gemeenschappelijke voorouder door de vertakking opnieuw te baseren op het doel of door het doel samen te voegen in uw vertakking. Deze acties worden verwijderd van het waarschuwingsbericht en helpen u te controleren of de werkelijke wijzigingen goed zijn.

Eén benadering is om de voortgang te herstellen en uw voortgang op te slaan voordat u de basis of samenvoeging opnieuw instelt. Vervolgens kunt u een nieuwe vertakking maken of een lege vertakking opnieuw maken en uw wijzigingen vanaf een duidelijk punt toepassen. Dit proces vereist mogelijk een geforceerde push naar extern als uw wijzigingen al aanwezig zijn.

Probleem met meerdere samenvoegingsbasissen voorkomen

Hier volgen algemene tips voor het voorkomen van het probleem met meerdere samenvoegingsbasis:

  • Wanneer u een pull-aanvraag voorbereidt, maakt u functietakken van de nieuwste versies van de hoofd- of releasebranch.
  • Vermijd het maken van vertakkingen die niet rechtstreeks afkomstig zijn van stabiele vertakkingen van uw opslagplaats, tenzij vereist.

Wat u moet doen als het probleem met meerdere samenvoegingsbasissen opnieuw wordt weergegeven

In grote opslagplaatsen met veel actieve inzenders kan dit probleem vooral onhandig zijn. Zelfs als u meerdere bases via samenvoegen kwijt raakt, kan de situatie opnieuw verschijnen. Als iemand een langdurige pull-aanvraag sluit, kan deze de situatie opnieuw maken. Hoewel er buildbeleid en -tests worden uitgevoerd, hebt u geen middelen om de pull-aanvraag te voltooien. Het opnieuw instellen en starten van een nieuwe vertakking kan helpen. Als er niets wordt gewijzigd, zijn uw wijzigingen waarschijnlijk duidelijk, zelfs als de situatie zich herhaalt.

Volgende stappen