git cherry-pick
is een krachtig commando dat het mogelijk maakt om willekeurige Git commits te pakken door verwijzing en toe te voegen aan de huidige werkende HEAD. Cherry picking is het kiezen van een commit van een branch en deze op een andere branch toepassen. git cherry-pick
kan handig zijn voor het ongedaan maken van wijzigingen. Bijvoorbeeld, stel dat een commit per ongeluk op de verkeerde branch gedaan is. Je kunt naar de juiste branch wisselen en de commit cherry-picken naar waar het hoort.
Wanneer git cherry pick gebruiken
git cherry-pick
is een handig gereedschap, maar niet altijd een best practice. Cherry picking kan dubbele commits veroorzaken en veel scenario’s waar cherry picking zou werken, hebben traditionele merges de voorkeur. Dit gezegd hebbende, is git cherry-pick
een handige tool voor een paar scenario’s…
Team samenwerking.
Vaak zal een team individuele leden vinden die in of rond dezelfde code werken. Misschien heeft een nieuwe productfunctie een backend en frontend component. Er kan wat gedeelde code zijn tussen de twee productsectoren. Misschien maakt de backend ontwikkelaar een datastructuur die de frontend ook zal moeten gebruiken. De frontend ontwikkelaar zou git cherry-pick
kunnen gebruiken om de commit te kiezen waarin deze hypothetische datastructuur gemaakt is. Deze keuze zou de frontend ontwikkelaar in staat stellen om door te gaan met zijn deel van het project.
Bug hotfixes
Wanneer een bug wordt ontdekt, is het belangrijk om zo snel mogelijk een fix aan de eindgebruikers te leveren. Een voorbeeldscenario: een ontwikkelaar is begonnen aan een nieuwe functie. Tijdens de ontwikkeling van die nieuwe functie identificeren ze een reeds bestaande bug. De ontwikkelaar creëert een expliciete commit om deze bug te patchen. Deze nieuwe patch commit kan direct in de master
branch ge-cherry-picked worden om de bug te repareren voordat het meer gebruikers raakt.
Wijzigingen ongedaan maken en verloren commits herstellen
Soms kan een feature
branch oud worden en niet samengevoegd worden in master
. Soms kan een pull request gesloten worden zonder samengevoegd te worden. Git verliest die commits nooit, en met commando’s als git log
en git reflog
kunnen ze gevonden worden en weer tot leven gewekt worden.
Hoe gebruik je git cherry pick
Om te demonstreren hoe je git cherry-pick
gebruikt, laten we aannemen dat we een repository hebben met de volgende branch status:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
gebruik is recht-toe-recht-aan en kan uitgevoerd worden als:
git cherry-pick commitSha
In dit voorbeeld commit
Sha is een commit referentie. Je kunt een commit referentie vinden door git log
te gebruiken. In dit voorbeeld hebben we laten we zeggen dat we commit `f` in master
willen gebruiken. Eerst zorgen we ervoor dat we op de master
branch werken.
git checkout master
Dan voeren we de cherry-pick uit met het volgende commando:
git cherry-pick f
Eenmaal uitgevoerd zal onze Git geschiedenis er als volgt uitzien:
a - b - c - d - f Master
\
e - f - g Feature
De f commit is succesvol gepicked in de master branch
Voorbeelden van git cherry pick
git cherry pick
kunnen ook aan enkele uitvoeringsopties doorgegeven worden.
-edit
Het doorgeven van de -edit
optie zal git om een commit bericht laten vragen voordat de cherry-pick operatie wordt uitgevoerd
--no-commit
De --no-commit
optie zal de cherry pick uitvoeren, maar in plaats van een nieuwe commit te maken, zal het de inhoud van de doel commit naar de werkdirectory van de huidige branch verplaatsen.
--signoff
De --signoff
optie voegt een ‘signoff’ signeer regel toe aan het eind van de cherry-pick commit boodschap
Naast deze handige opties accepteert git cherry-pick
ook een variëteit aan samenvoeg strategie opties. Leer meer over deze opties in de git samenvoeg strategieën documentatie.
Daarnaast accepteert git cherry-pick ook optie invoer voor het oplossen van samenvoeg conflicten, dit omvat opties: --abort --continue
en --quit
deze opties worden meer in de diepte behandeld met betrekking tot git merge en git rebase.
Samenvatting
Cherry picking is een krachtig en handig commando dat in een paar scenario’s ongelooflijk nuttig is. Cherry picking moet niet misbruikt worden in plaats van git merge of git rebase. Het git log commando is nodig om te helpen commits te vinden om te cherry picken.