git cherry-pick
er en kraftfuld kommando, der gør det muligt at vælge vilkårlige Git-kommandoer som reference og føje dem til den aktuelle arbejds-HEAD. Cherry picking er den handling at plukke et commit fra en gren og anvende det på en anden. git cherry-pick
kan være nyttig til at fortryde ændringer. Lad os f.eks. sige, at et commit ved et uheld er lavet til den forkerte gren. Du kan skifte til den korrekte gren og cherry-picke commit’et til der, hvor det burde høre hjemme.
Hvornår skal man bruge git cherry pick
git cherry-pick
er et nyttigt værktøj, men ikke altid en bedste praksis. Cherry picking kan forårsage dobbeltcommits, og i mange scenarier, hvor cherry picking ville fungere, er traditionelle sammenlægninger at foretrække i stedet. Når det er sagt, er git cherry-pick
et praktisk værktøj til nogle få scenarier…
Teamsamarbejde.
Ofte vil et team finde individuelle medlemmer, der arbejder i eller omkring den samme kode. Måske har en ny produktfunktion en backend- og en frontend-komponent. Der kan være noget delt kode mellem til to produktsektorer. Måske skaber backend-udvikleren en datastruktur, som frontend-udvikleren også skal bruge. Frontend-udvikleren kunne bruge git cherry-pick
til at vælge den commit, hvor denne hypotetiske datastruktur blev oprettet. Dette valg ville gøre det muligt for frontend-udvikleren at fortsætte fremskridtene på deres side af projektet.
Fejlrettelser
Når en fejl bliver opdaget, er det vigtigt at levere en rettelse til slutbrugerne så hurtigt som muligt. For et eksempel på et scenarie,lad os sige, at en udvikler er begyndt at arbejde på en ny funktion. Under udviklingen af den nye funktion identificerer de en allerede eksisterende fejl. Udvikleren opretter en eksplicit commit, der patcherer denne fejl. Dette nye patch-cit kan blive hentet direkte til master
-grenen for at rette fejlen, før den påvirker flere brugere.
Fortrydelse af ændringer og genoprettelse af tabte commits
I nogle tilfælde kan en feature
-grene blive forældet og ikke blive flettet ind i master
. Nogle gange kan en pull request blive lukket uden at blive fusioneret. Git mister aldrig disse commits, og ved hjælp af kommandoer som git log
og git reflog
kan de findes og høstes tilbage til livet.
Sådan bruges git cherry pick
For at demonstrere, hvordan man bruger git cherry-pick
, lad os antage, at vi har et repository med følgende branch-status:
a - b - c - d Master
\
e - f - g Feature
git cherry-pick
brugen er ligetil og kan udføres som:
git cherry-pick commitSha
I dette eksempel commit
Sha er en commit-reference. Du kan finde en commit-reference ved at bruge git log
. I dette eksempel har vi konstrueret lad os sige, at vi ønskede at bruge commit `f` i master
. Først sikrer vi os, at vi arbejder på master
-grenen.
git checkout master
Dernæst udfører vi cherry-pick med følgende kommando:
git cherry-pick f
Når den er udført, vil vores Git-historik se ud som følger:
git cherry-pick f
a - b - c - d - f Master
\
e - f - g Feature
The f commit has been successfully picked into the master branch
Eksempler på git cherry pick
git cherry pick
kan også få overgivet nogle eksekveringsindstillinger.
-edit
Givelse af -edit
-indstillingen vil få git til at bede om en commit-meddelelse, før cherry-pick-operationen anvendes
--no-commit
Optionen --no-commit
vil udføre cherry pick, men i stedet for at lave et nyt commit vil den flytte indholdet af målcommitten ind i arbejdskataloget for den aktuelle gren.
--signoff
Optionen --signoff
vil tilføje en ‘signoff’-signaturlinje til slutningen af cherry-pick-kommitteringsmeddelelsen
Ud over disse nyttige muligheder accepterer git cherry-pick
også en række forskellige flette-strategiindstillinger. Få mere at vide om disse indstillinger i dokumentationen om git merge strategies.
Dertil kommer, at git cherry-pick også accepterer indstillingsinput til løsning af fusionskonflikter, dette omfatter indstillinger: --abort --continue
og --quit
disse indstillinger er dækket mere i dybden med hensyn til git merge og git rebase.
Resumé
Cherry-pick er en kraftfuld og praktisk kommando, der er utrolig nyttig i nogle få scenarier. Cherry picking bør ikke misbruges i stedet for git merge eller git rebase. Kommandoen git log er nødvendig for at hjælpe med at finde commits til cherry pick.