git cherry-pick
on tehokas komento, joka mahdollistaa mielivaltaisten Git-kommittien poimimisen viittauksen perusteella ja liittämisen nykyiseen työ-HEADiin. Cherry picking tarkoittaa sitä, että poimitaan kommitointi yhdestä haarasta ja liitetään se toiseen haaraan. git cherry-pick
voi olla hyödyllinen muutosten peruuttamisessa. Sanotaan esimerkiksi, että toimitus tehdään vahingossa väärään haaraan. Voit siirtyä oikeaan haaraan ja cherry-pickata commitin sinne, minne sen pitäisi kuulua.
Milloin kannattaa käyttää git cherry pickiä
git cherry-pick
on hyödyllinen työkalu, mutta ei aina paras käytäntö. Cherry picking voi aiheuttaa päällekkäisiä committeja ja monissa skenaarioissa, joissa cherry picking toimisi, suositaan sen sijaan perinteisiä yhdistämisiä. Tämän sanottuaan git cherry-pick
on kätevä työkalu muutamissa skenaarioissa…
Tiimiyhteistyö.
Usein tiimin yksittäiset jäsenet työskentelevät saman koodin parissa tai sen ympärillä. Ehkä uudella tuoteominaisuudella on backend- ja frontend-komponentti. Näiden kahden tuotesektorin välillä voi olla jaettua koodia. Ehkä backend-kehittäjä luo tietorakenteen, jota myös frontendin on hyödynnettävä. Frontend-kehittäjä voisi käyttää git cherry-pick
-toimitusta valitakseen toimituksen, jossa tämä hypoteettinen tietorakenne luotiin. Tämä valinta antaisi frontend-kehittäjälle mahdollisuuden jatkaa projektin etenemistä omalla puolellaan.
Vikojen kuumakorjaukset
Kun löydetään virhe, on tärkeää toimittaa korjaus loppukäyttäjille mahdollisimman nopeasti. Esimerkkiskenaario,vaikkapa kehittäjä on aloittanut uuden ominaisuuden työstämisen. Uuden ominaisuuden kehittämisen aikana he havaitsevat jo olemassa olevan bugin. Kehittäjä luo nimenomaisen toimituksen, jolla tämä vika korjataan. Tämä uusi korjaussitoumus voidaan siirtää suoraan master
-haaraan vian korjaamiseksi ennen kuin se vaikuttaa useampaan käyttäjään.
Muutosten peruuttaminen ja kadonneiden sitoumusten palauttaminen
Joskus feature
-haara voi jäädä vanhentuneeksi eikä sitä yhdistetä master
-haaraan. Joskus pull request saatetaan sulkea ilman yhdistämistä. Git ei koskaan menetä näitä kommitteja, ja komentojen kuten git log
ja git reflog
avulla ne voidaan löytää ja kerätä takaisin eloon.
Gitin cherry pickin käyttö
Käytön havainnollistamiseksi olettakaamme, että meillä on arkisto, jossa on seuraava haaran tila:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
käyttö on suoraviivaista ja se voidaan suorittaa seuraavasti:
git cherry-pick commitSha
Tässä esimerkissä commit
Sha on komitoviite. Voit etsiä commit-viitteen käyttämällä git log
. Tässä esimerkissä olemme rakentaneet sanotaan, että haluaisimme käyttää master
:ssä olevaa sitoumusta `f`. Ensin varmistamme, että työskentelemme master
-haarassa.
git checkout master
Sitten suoritamme cherry-pickin seuraavalla komennolla:
git cherry-pick f
Kun se on suoritettu, Git-historiamme näyttää seuraavalta:
a - b - c - d - f Master
\
e - f - g Feature
F commit on onnistuneesti poimittu master-haaraan
Esimerkkejä git cherry pick
git cherry pick
voidaan myös välittää joitakin suoritusasetuksia.
-edit
Vaihtoehdon -edit
välittäminen saa git:n pyytämään commit-viestin ennen kirsikanpoimintaoperaation soveltamista
--no-commit
Vaihtoehto --no-commit
suorittaa kirsikanpoiminnan, mutta sen sijaan, että se tekisi uuden commitin, se siirtää kohdetoimituksen sisällön nykyisen haaran työhakemistoon.
--signoff
Vaihtoehto --signoff
lisää ”signoff”-allekirjoitusrivin cherry-pick-commit-viestin loppuun
Näiden hyödyllisten vaihtoehtojen lisäksi git cherry-pick
hyväksyy myös erilaisia yhdistämisstrategian vaihtoehtoja. Lue lisää näistä vaihtoehdoista git merge strategies -dokumentaatiosta.
Lisäksi git cherry-pick hyväksyy myös vaihtoehdon syötteen yhdistämisristiriitojen ratkaisua varten, tämä sisältää vaihtoehdot: --abort --continue
ja --quit
näitä vaihtoehtoja käsitellään syvällisemmin git merge ja git rebase -komentojen yhteydessä.
Yhteenveto
Cherry picking on tehokas ja kätevä komento, joka on uskomattoman hyödyllinen muutamissa skenaarioissa. Cherry pickingiä ei pidä käyttää väärin git merge:n tai git rebase:n sijasta. git log -komentoa tarvitaan auttamaan cherry pickattavien komentojen löytämisessä.