git cherry-pick är ett enkelt men kraftfullt verktyg som låter dig selektivt överföring begår från en filial till en annan. Du kan använda den när du inte vill slå ihop en hel gren till master, men ändå vill inkludera ändringar från en funktionsgren.
Vad är Git Cherry Pick och hur fungerar det?
I Git är commits de enheter som spårar förändringar över tid. Varje åtagande kan representera en buggfix, ny funktion eller del av en större lösning. Du kan tänka dig att commits lagras som en länkad lista som pekar tillbaka i tiden; när du byter filialhuvud rekonstruerar Git dina lokala katalogfiler genom att ta hänsyn till alla åtaganden som går tillbaka till början.
Detta är en förenkling förstås, och Git lagrar inte tekniskt sett som enkla listor över ändringar, den använder filbaserade blobbar, men principen är densamma.
Saker och ting blir mer komplicerade när grenar engagerar sig. Ofta tar arbetet med en funktion många dagar eller veckor. I stället för att röra upp huvudförvaret går det in i en separat funktionsgren och kodgranskas sedan och slås samman igen. Sammanslagning förgrenar i princip denna engagemangshistorik så att hela funktionsgrenen ingår när Git gör sitt.
Men tänk om du vill slå ihop vissa saker, men gör inte &# 8217; vill du inte att hela grenen ska inkluderas ännu? Du kan inte gå ihop i så fall.
Annonsering
Det är här git cherry-pick blir användbart. Det gör vad namnet antyder — tar ett enda åtagande från funktionsgrenen, plockar ut det individuellt och tillämpar det på huvudgrenen, eller vice versa. Detta kopierar åtagandet så att det finns ett helt nytt åtagande på målgrenen.
Observera att det inte finns någon riktig rad ” koppla det nya åtagandet på huvudgrenen till det gamla åtagandet. Det nya körsbärsplockade åtagandet som skapades på master refererar inte alls till källåtagandet, utan åtagandet kopieras helt enkelt. Git tar hand om det när du slår ihop grenarna igen, eftersom åtagandena ses som kopior av varandra.
I själva verket överförs åtagandet “ ” över till den nya grenen, men du måste komma ihåg att den gamla åtagandet fortfarande tillämpas på funktionsgrenen. Du vill dock inte återställa källåtagandet, eftersom det kommer att orsaka problem vid sammanslagning senare.
Varför Cherry Pick?
Det finns några användningsfall för detta. Kanske arbetar du med en funktion, och den är inte redo att släppas, men du har åtgärdat ett fel på funktionsgrenen som du vill komma in i din veckovisa version. Du kan använda cherry-pick för att kopiera buggfixen till Master för att distribuera den tidigt.
Eller kanske har du flera grenar för produktion och utveckling, och du vill kopiera en brådskande buggfix från produktion till utveckling. Cherry pick kan också göra det.
Eller så har du till och med av misstag gjort dig skyldig till fel gren. Du kan använda git cherry-pick för att kopiera den till den rätta och sedan återställa git för att ångra den åtagandet (förutsatt att den ligger i grenens HEAD).
Använda Git Cherry Pick
När du förstår vad du gör är git cherry-pick ganska enkelt att använda.
Annonsering
Det enklaste sättet att se Gits engagemangshistorik på kommandoraden är med följande kommando, som visar alla åtaganden men med en gren- och sammanfogningshistorik, vilket är avgörande för att använda cherry -pick:
git log – -pretty = format: ” %h %s” –graph
Sedan , du kan helt enkelt kopiera SHA1-hash för engagemanget och köra cherry pick:
git cherry-pick 1da76d3
Observera att du också kan cherry picka flera commits samtidigt, bara passera i flera hashar.
git cherry-pick har några användbara alternativ:
- -no-commit gäller endast ändringarna i din katalog. Du kommer att behöva iscensätta och begå manuellt.
- -redigera låter dig ändra åtagandemeddelandet.
- -x lägger till ett meddelande som säger “ cherry picked from commit: … ”
Naturligtvis, om du använder en GUI -baserad Git -klient som Fork eller GitKraken, som vi rekommenderar starkt, kan du bara högerklicka på åtagandet och välj att välja det: