Git Cherry Pick
git cherry-pick
is een krachtige opdracht waarmee willekeurige Git-commits kunnen worden geselecteerd door verwijzing en kunnen worden toegevoegd aan de actieve HEAD. Bij 'cherry picking' wordt een commit uit een branch gekozen en op een andere toegepast. git cherry-pick
kan handig zijn om wijzigingen ongedaan te maken. Stel bijvoorbeeld dat er per ongeluk een commit wordt gemaakt naar de verkeerde branch. Je kunt dan naar de juiste branch gaan en de commit 'cherry-picken' waar deze wél hoort.
Wanneer Git cherry pick gebruiken
git cherry-pick
is een handig hulpmiddel maar niet altijd een beproefde methode. 'Cherry picking' kan leiden tot dubbele commits en in veel scenario's waarin 'cherry picking' zou werken, hebben traditionele samenvoegingen de voorkeur. Dat gezegd hebbende is git cherry-pick
een handig hulpmiddel voor een paar scenario's ...
Teamsamenwerking
Vaak zal een team merken dat individuele leden in of rond dezelfde code werken. Misschien heeft een nieuwe productfunctie een backend- en frontend-component. Er kan sprake zijn van code die door twee productsectoren wordt gedeeld. Misschien maakt de back-endontwikkelaar een gegevensstructuur die de frontend ook moet gebruiken. De frontend-ontwikkelaar kan dan git cherry-pick
gebruiken om de commit te kiezen waarin deze hypothetische gegevensstructuur is aangemaakt. Met deze keuze kan de frontend-ontwikkelaar aan zijn kant doorwerken aan het project.
gerelateerd materiaal
Een volledige Git-repository verplaatsen
Oplossing bekijken
Git leren met Bitbucket Cloud
Hotfixes voor fouten
Wanneer er een bug wordt ontdekt, is het belangrijk om eindgebruikers zo snel mogelijk een oplossing te bieden. Stel dat een ontwikkelaar aan een nieuwe functie is begonnen. Tijdens de ontwikkeling van die nieuwe functie constateert hij of zij een bestaande bug. De ontwikkelaar maakt een expliciete commit aan met een patch voor deze bug. Deze nieuwe patch-commit kan rechtstreeks op de main
-branch worden toegepast, zodat de bug wordt opgelost voordat hij meer gebruikers beïnvloedt.
Wijzigingen ongedaan maken en verloren commits herstellen
Soms kan een feature
- of functie-branch oud worden en niet worden samengevoegd met de main
. Soms kan een pull request gesloten worden zonder dat er een merge wordt uitgevoerd. Git verliest die commits nooit. Via opdrachten zoals git log en git reflog kunnen ze worden gevonden en met behulp van 'cherry picking' weer tot leven worden geroepen.
Hoe Git cherry pick gebruiken
We willen laten zien hoe git cherry-pick
kan worden gebruikt. Stel dat we een repository hebben met de volgende branch-status:
a - b - c - d Main
\
e - f - g Feature
git cherry-pick
kan eenvoudig worden gebruikt en als volgt worden uitgevoerd:
git cherry-pick commitSha
In dit voorbeeld is commit
Sha een commitreferentie. Je kunt een commitreferentie vinden door git log
te gebruiken. In dit voorbeeld willen we commit `f` gebruiken in main
. Eerst zorgen we ervoor dat we aan de main
-branch werken.
git checkout main
Vervolgens voeren we de cherry-pick uit met de volgende opdracht:
git cherry-pick f
Eenmaal uitgevoerd zal onze Git-geschiedenis er als volgt uitzien:
a - b - c - d - f Main
\
e - f - g Feature
De f-commit is gekozen in de main-branch.
Voorbeelden van 'git cherry pick'
git cherry pick
kan ook worden doorgegeven aan enkele uitvoeringsopties.
-edit
Het doorgeven van de optie -edit
zal ertoe leiden dat git om een commit-bericht vraagt voordat de cherry-pick-bewerking wordt toegepast.
--no-commit
De optie --no-commit
zal de cherry pick uitvoeren, maar in plaats van een nieuwe commit te maken, zal de inhoud van de doelcommit worden verplaatst naar de werkmap van de huidige branch.
--signoff
De optie --signoff
voegt een 'signoff'-handtekeningregel toe aan het einde van het cherry-pick commit-bericht
Naast deze handige opties accepteert git cherry-pick
ook tal van opties voor de samenvoegingsstrategie. Lees meer over deze opties in de documentatie over git merge-strategieën.
Git cherry-pick accepteert daarnaast ook optie-invoer voor het oplossen van samenvoegingsconflicten. Dit omvat de volgende opties: --abort --continue
en --quit
. Deze opties worden dieper behandeld met betrekking tot git merge en git rebase.
Samenvatting
'Cherry picking' is een krachtige en handige opdracht die ongelooflijk nuttig is in een paar scenario's. 'Cherry picking' mag niet worden misbruikt in plaats van git merge of git rebase. De opdracht git log is vereist om commits te vinden voor cherry pick.
Deel dit artikel
Volgend onderwerp
Aanbevolen artikelen
Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.