logo

Git – Kersenpluk

git kersenpluk in git betekent het kiezen van een commit uit de ene branch en deze toepassen op een andere branch. Dit in tegenstelling tot andere manieren zoals samenvoegen En inhalen die normaal gesproken veel commits in een andere branch toepassen.

git cherry-pick is net als rebasen , een geavanceerd concept en ook een krachtig commando. Het wordt voornamelijk gebruikt als je niet de hele branch wilt samenvoegen en je een deel van de commits wilt.



Wanneer kersenpluk gebruiken?

Stel dat een ontwikkelaar er niet in slaagt te herkennen op welke branch hij zich momenteel bevindt, en per ongeluk een commit maakt naar een andere branch in plaats van zich te committeren aan de hoofdbranch. Om het te repareren, moet hij eerst rennen git-show , sla dan de commit op, bekijk de hoofdbranch, pas daar een patch toe, en commit met hetzelfde commit-bericht. Maar dit alles kan automatisch worden gedaan door slechts één commando te gebruiken, d.w.z. kersenpluk.

Om het beter te begrijpen, raadpleegt u het onderstaande diagram als volgt:

Vóór Cherry Pick



Vóór Cherry Pick

Na Cherry Pick

Na Cherry Pick

Het commando voor Cherry-pick is als volgt:



git cherry-pick>

Commit-hash: Een commit-hash is een unieke identificatie die door Git wordt gegenereerd. Elke commit heeft zijn eigen commit-hash.

Opmerking: Zorg er tijdens het gebruik van dit commando voor dat je in de branch bent waarop je de commit wilt toepassen.

Hoe te gebruiken kersenpluk?

Hier is de stapsgewijze uitleg van het gebruik van de opdracht Cherry Pick in het hieronder gemaakte project, dat hieronder stapsgewijs als volgt wordt weergegeven:

css voor tekstomloop

Stap 1: Het openen van de git bash en het creëren van een nieuw project met de naam steekproef en het initialiseren van de repository met behulp van de het is heet commando.

Stap 2: Het creëren van een ' .tekst' bestand gebruiken Wij commando toe aan het project, laten we zeggen een indexbestand, en voeg het toe aan ons voorbeeldproject en voer een commit uit en schrijf een commit-bericht voordat u op Enter drukt.

Opmerking: Na het uitvoeren van de Wij command, typ :wq om het bestand op te slaan en af ​​te sluiten.

Je kunt je commit controleren door git log commando gemakkelijk:

Stap 3: Stel nu dat we twee versies hebben, dus maak twee verschillende vertakkingen met behulp van de git-tak command en ga naar een branch, laten we zeggen 2, met behulp van git afrekenen commando.

Opmerking: Je kunt eenvoudig alle branches bekijken door het git branch commando uit te voeren, zoals getoond in het onderstaande diagram.

Stap 4: Stel nu dat u aan een nieuwe functie wilt werken, dus als u een nieuw functiebestand maakt en toevoegt, laten we zeggen feature.txt gebruiken Wij En toevoegen commando, zoals hieronder weergegeven. Leg vervolgens uw wijzigingen vast met een commit-bericht.

Je kunt je commit controleren met het git log commando, zoals hieronder getoond:

Het laat duidelijk onze eerste commit zien waar onze branch 1 zich bevindt en in branch 2 is deze verder weggegaan en we werken momenteel aan onze feature in branch 2

Stap 5: Stel nu dat we een bug in onze functie hebben gevonden en dat we te weten zijn gekomen dat dezelfde bug ook aanwezig is in onze 1-branch.

En nu proberen we een bug of probleem op te lossen, zoals hieronder weergegeven, door een fix.txt-bestand toe te voegen, laten we veronderstellen, en het toe te voegen aan de huidige branch, d.w.z. 2, en de vereiste wijzigingen door te voeren.

Onze definitieve toezeggingen controleren:

Stap 6: Nu, we hebben de bug in tak 2 gerepareerd, maar we moeten deze oplossing ook aan onze tak 1 toevoegen, maar we willen deze tak 2 niet samenvoegen met onze tak 1, omdat er mogelijk nog steeds aan de functie wordt gewerkt.

In dit scenario kunnen we dus deze specifieke commit kiezen. Kopieer hiervoor gewoon het hasj waarde gemarkeerd in het bovenstaande diagram, ga dan naar tak 1 met behulp van checkout en gebruik vervolgens de opdracht kersenpluk en plak de hash die we zojuist hebben gekopieerd.

Zoals duidelijk uit het bovenstaande blijkt, merken we dat we voorheen alleen index.txt hadden voordat we aan de cherry-picking deden, maar nu hebben we het fix.txt-bestand ook in onze eerste branch.

Als we het nu proberen te controleren git log –oneline , zullen we kunnen zien dat die commit ook in branch 1 kwam.

Enkele belangrijke gebruiksscenario's van Cherry-pick

Hieronder volgen enkele veelvoorkomende toepassingen van Cherry-Pick:

  1. Als je per ongeluk een commit maakt in een verkeerde branch, dan kun je met behulp van cherry-pick de vereiste wijzigingen toepassen.
  2. Stel dat dezelfde datastructuur moet worden gebruikt door zowel de frontend als de backend van een project. Vervolgens kan een ontwikkelaar cherry-pick gebruiken om de commit te kiezen en deze voor zijn/haar deel van het project te gebruiken.
  3. Op het moment dat een bug wordt gevonden, is het van cruciaal belang om zo snel als verwacht een oplossing aan de eindgebruikers over te brengen.
  4. Een deel van de tijd kan een component branch oud worden en niet geconvergeerd worden in de hoofdbranch en kan het verzoek gesloten worden, maar omdat git deze commits nooit verliest, kan het worden uitgekozen en zou het terug komen.

Nadelen van het gebruik van Cherry Pick

Cherry-picking zou niet altijd moeten worden gebruikt, omdat dit kopieer-vastleggingen kan veroorzaken en talrijke situaties waarin cherry-picking zou werken; conventionele samenvoegingen worden over het geheel genomen gewaardeerd. Ook in de situatie waarin de commits van 2 of meer branches soortgelijke coderegels updaten met verschillende substanties en git de ene commit naar de andere branch kiest, veroorzaakt dit ook conflicten.

Conclusie

Het cherry-pick-commando van Git is een krachtig hulpmiddel voor het selectief toepassen van specifieke commits tussen branches. Het is geweldig voor het herstellen van fouten en het delen van code, maar overmatig gebruik ervan kan tot problemen leiden, vooral wanneer commits dezelfde coderegels raken. Gebruik het dus verstandig om een ​​schone en efficiënte codegeschiedenis te behouden.