Přeskočit na hlavní obsah

Cherry pick

Cherry-pick je metoda, kdy si z jiné větve vezmeme jen jeden konkrétní commit, který potřebujeme, a přidáme si ho do své větve. Lze si to představit jako merge, ale nespojujeme celou větev, jen vybrané commity.

Jak provést cherry-pick

Dejme tomu, že máme větve main, feature/animation a release/1.0.0. Původně jsme chtěli featuru animací vydat už ve verzi 1.0.0. Featura se však nestihla dokončit, ale přeci jen v této verzi chceme vydat alespoň základní animační engine. Ten vznikl v jednom z commitů ve feature/animation.

Chcete tedy commit "Add animation engine" přesunout do větve release/1.0.0. Příkaz provádíme vždy z větve, do které chceme cherry-pickovat. V našem případě tedy release/1.0.0. Zavoláte tedy příkaz git cherry-pick <commit hash>:

git cherry-pick a1b2c3d
[release/1.0.0 a1b2c3d] Add animation engine
Date: Tue Nov 11 18:42:36 2025 +0100
3 files changed, 57 insertions(+)
create mode 100644 src/animation/engine.py

Kdy zvolit použití cherry-pick

Jedná se o velmi silný nástroj. Zároveň má ale jisté konsekvence, kterým je nutné rozumět. Není tedy vhodný pro všechny případy.

Kdy se vyplatí cherry-pick použít
  • Oprava chyb v produkční verzi - commit s opravou je už v mainu, ale je potřeba jej dostat do konkrétní release větve
  • Přenesení hotové části nehotové funkce - v pracovní větvi se nachází část, vhodná v jiné větvi
  • Záchrana změn ze zrušené větve - pracovní větev byla zrušena, ale jsou v ní změny, které stojí za to aplikovat jinde
  • Přidání konkrétního fixu do více verzí - v mainu je nový bezpečnostní fix, který je nutný dostat do více vydaných verzí
Kdy cherry-pick není vhodný
  • Pokud má commit závislosti - Některé commity mohou stavět na změnách z předchozích commitů té větve. Cherry-pick ale přenese pouze tento commit, takže některé potřebné změny nebudou dostupné.
  • Více commitů za sebou - Pokud je třeba přenést větší část historie - použij spíše rebase nebo merge.
Cherry-pick používej jen tehdy, když opravdu víš, že chceš právě ten jeden commit a nic dalšího.