
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.
Hotfixes voor fouten
When a bug is discovered it is important to deliver a fix to end users as quickly as possible. For an example scenario,say a developer has started work on a new feature. During that new feature development they identify a pre-existing bug. The developer creates an explicit commit patching this bug. This new patch commit can be cherry-picked directly to the main
branch to fix the bug before it effects more users.
Wijzigingen ongedaan maken en verloren commits herstellen
Sometimes a feature
branch may go stale and not get merged into main
. Sometimes a pull request might get closed without merging. Git never loses those commits and through commands like git log
and git reflog
they can be found and cherry picked back to life.
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 this example commit
Sha is a commit reference. You can find a commit reference by using git log
. In this example we have constructed lets say we wanted to use commit `f` in main
. First we ensure that we are working on the main
branch.
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
The f commit has been successfully picked into the 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.