Wat doet Git Cherry Pick en wanneer moet je het gebruiken?

0
187

git cherry-pick is een eenvoudige maar krachtige tool waarmee je selectief zet commits over van de ene branch naar de andere. Je kunt het gebruiken als je niet een hele branch in master wilt mergen, maar toch wijzigingen van een feature branch wilt opnemen.

Wat is Git Cherry Pick, en hoe werkt het?

In Git zijn commits de eenheden die veranderingen in de loop van de tijd bijhouden. Elke commit kan een bugfix, nieuwe functie of onderdeel van een grotere oplossing vertegenwoordigen. Je kunt denken aan commits die worden opgeslagen als een gelinkte lijst die terug in de tijd verwijst; telkens als je je branch HEAD verandert, reconstrueert Git je lokale directorybestanden door rekening te houden met alle commits die teruggaan naar het begin.

Dit is natuurlijk een vereenvoudiging, en Git slaat commits technisch niet op als eenvoudige lijsten met wijzigingen, het gebruikt op bestanden gebaseerde blobs, maar het principe is hetzelfde.

De zaken worden ingewikkelder wanneer filialen erbij betrokken raken. Vaak duurt het werken aan een functie vele dagen of weken. In plaats van de hoofdrepository vol te proppen, gaat het naar een aparte feature branch, en wordt dan de code beoordeeld en er weer in samengevoegd. Samenvoegen is in feite het vertakken van deze commit geschiedenis, zodat de hele feature branch wordt opgenomen wanneer Git zijn ding doet.

Echter, wat als je sommige dingen wilt samenvoegen, maar dat niet doet 8217; wil je niet dat het hele filiaal wordt opgenomen? In dat geval kun je git merge niet doen.

Advertentie

Dit is waar git cherry-pick nuttig wordt. Het doet wat de naam doet vermoeden: het haalt een enkele commit uit de feature-branch, selecteert het individueel en past het toe op de master-branch, of vice versa. Dit kopieert de commit, zodat er een geheel nieuwe commit is op de doelbranch.

Merk op dat er geen echte “lijn” het verbinden van de nieuwe commit op de master branch met de oude commit. De nieuwe door kers geplukte commit die op master is gemaakt, verwijst helemaal niet naar de broncommit, de commit wordt eenvoudigweg gekopieerd. Git zorgt ervoor als je de branches weer samenvoegt, omdat de commits worden gezien als kopieën van elkaar.

In feite wordt de commit “overgedragen” naar de nieuwe branch, hoewel je er rekening mee moet houden dat de oude commit nog steeds wordt toegepast op de feature branch. Je zou de broncommit echter niet willen terugdraaien, aangezien dat later problemen zal veroorzaken bij het samenvoegen.

Waarom Cherry Pick?

Hiervoor zijn een paar use-cases. Misschien werk je aan een feature en is deze nog niet klaar voor release, maar heb je een bug in de feature branch gerepareerd die je graag in je wekelijkse releaseversie wilt hebben. Je kunt cherry-pick gebruiken om de bugfix naar Master te kopiëren om deze vroeg te implementeren.

Of misschien heb je meerdere branches voor productie en ontwikkeling, en wil je een dringende bugfix kopiëren van productie tot ontwikkeling. Cherry Pick kan dat ook.

Of misschien heb je zelfs per ongeluk een commit gedaan naar de verkeerde branch. Je kunt git cherry-pick gebruiken om het naar de juiste te kopiëren en vervolgens git reset gebruiken om die commit ongedaan te maken (op voorwaarde dat het zich in de HEAD van de branch bevindt).

Git Cherry Pick gebruiken

Als je eenmaal begrijpt wat je doet, is git cherry-pick vrij eenvoudig te gebruiken.

Advertentie

De gemakkelijkste manier om Git's commit-geschiedenis op de opdrachtregel te bekijken, is met het volgende commando, dat alle commits toont, maar met een branch- en merge-geschiedenis, wat cruciaal is voor het gebruik van cherry-pick:

git log – -pretty=format:”%h %s” –graph

Dan , kun je eenvoudig de SHA1-hash van de commit kopiëren en de cherry-pick uitvoeren:

git cherry-pick 1da76d3

Merk op dat je ook meerdere commits tegelijk kunt kiezen, geef gewoon meerdere hashes door.

git cherry-pick heeft een paar handige opties:

  • –no-commit past alleen de wijzigingen toe op je directory. Je moet handmatig stagen en committen.
  • –edit laat je het commit-bericht wijzigen.
  • -x zal een bericht toevoegen met de tekst “cherry geplukt uit commit: …”

Natuurlijk, als je een GUI-gebaseerde Git-client zoals Fork of GitKraken gebruikt, die we ten zeerste aanbevelen, kun je gewoon met de rechtermuisknop op klikken de commit en kies ervoor om deze als kers te kiezen: