Cherry-pick — ay isang utos ng Git na naglalapat ng mga pagbabago mula sa isa o higit pang umiiral na commit sa kasalukuyang branch. Hindi tulad ng Merge (naglilipat ng buong branch) at Rebase (naglilipat ng pagkakasunod-sunod ng mga commit), ang cherry-pick ay pumipili lamang ng mga tinukoy na commit. Ayon sa git-scm.com, 2025, ang cherry-pick ay pinaka-kailangan sa mga sitwasyon ng paglilipat ng mga pag-aayos sa pagitan ng mga release branch.
Mga pangunahing punto
Cherry-pick — ay isang utos ng Git na kumukopya ng mga pagbabago mula sa isang tinukoy na commit at inilalapat ang mga ito bilang bagong commit sa kasalukuyang branch. Ang pangalan ay nagmula sa metapora na “pumipili ng seresa”: ang developer ay pumipili lamang ng mga commit na kailangan, hindi pinapansin ang iba.
Hindi tulad ng Merge, ang cherry-pick ay hindi gumagawa ng merge commit at hindi nangangailangan ng buong pagsasama ng mga branch. Hindi tulad ng Rebase, ang cherry-pick ay hindi naglilipat ng pagkakasunod-sunod ng mga commit — tanging ang mga tinukoy. Ginagawa nitong perpektong kasangkapan ang cherry-pick para sa tumpak na paglilipat ng mga pag-aayos.
Ayon sa data ng Atlassian, 2025, ang cherry-pick ay ginagamit sa 47% ng mga koponan na nagtatrabaho nang sabay-sabay sa maraming release branch. Ang cherry-pick ay lalong kailangan sa mobile development, kung saang maraming bersyon ng application (LTS releases) ang sinusuportahan nang sabay-sabay at kinakailangan ang paglilipat ng mga pag-aayos sa pagitan nila.
Sa pagpapatakbo ng cherry-pick, kinakalkula ng Git ang diff sa pagitan ng tinukoy na commit at ng magulang nito, pagkatapos ay inilalapat ang diff na ito sa kasalukuyang branch. Kung ang mga pagbabago ay nailapat nang walang conflict — ang Git ay lumilikha ng bagong commit na may parehong mensahe ngunit bagong SHA. Kung may conflict — ang cherry-pick ay i-pause para sa manu-manong paglutas.
Sintaks ng cherry-pick ay simple: tukuyin ang hash ng commit na nais mong ilipat. Kokopyahin ng Git ang mga pagbabago sa kasalukuyang branch bilang bagong commit. Ang paglilipat ng maraming commit nang sabay-sabay at buong range ay sinusuportahan.
# Paglilipat ng isang commit sa kasalukuyang branch
git cherry-pick a1b2c3d4
# Paglilipat ng maraming commit
git cherry-pick a1b2c3d4 e5f6g7h8
# Paglilipat ng range ng mga commit (mula a1b2 hanggang f9e8, hindi kasama ang a1b2)
git cherry-pick a1b2c3d4..f9e8d7c6
Pagkatapos isagawa ang cherry-pick, ang kasalukuyang branch ay tumatanggap ng bagong commit na may mga pagbabago mula sa orihinal. Ang mensahe ng commit ay kinokopya bilang default mula sa orihinal, ngunit maaaring baguhin gamit ang flag na -n (huwag gumawa ng commit) o --edit (baguhin ang mensahe).
Isaalang-alang ang tipikal na scenario: sa develop ay natagpuan at naayos ang isang kritikal na bug na naroroon din sa release branch na release/v2.0. Kailangan lamang ilipat ang pag-aayos na ito, nang hindi isinasama ang buong develop sa release branch.
# Hanapin ang hash ng commit na may pag-aayos sa develop
git log --oneline develop
# a1b2c3d fix: null check in payment processing
# Lumipat sa release branch
git checkout release/v2.0
# Ilapat ang pag-aayos
git cherry-pick a1b2c3d4
# Kung may conflict — lutasin at magpatuloy
git add src/payment/PaymentProcessor.kt
git cherry-pick --continue
Ang flag na -x ay nagdaragdag sa mensahe ng commit ng isang sanggunian sa orihinal na SHA: “(cherry picked from commit a1b2c3d4)”. Pinapadali nito ang pagsubaybay kung saan inilipat ang commit. Inirerekomenda ang paggamit ng -x sa lahat ng scenario, maliban sa mga pansamantalang draft.
Sa conflict, ang cherry-pick ay kumikilos tulad ng merge: humihinto ang Git at minamarkahan ang mga file na may conflict. Nilulutas ng developer ang conflict, ginagawa ang git add at pagkatapos ay git cherry-pick --continue. Para kanselahin — git cherry-pick --abort. Ang flag na --strategy ay nagbibigay-daan upang tukuyin ang estratehiya ng pagsasama (halimbawa, recursive na may mga opsyon).
# Paglutas ng conflict sa cherry-pick
# Ipinapakita ng Git ang mga file na may conflict
git status
# Lutasin nang manu-mano, pagkatapos:
git add pinapayagang_file.kt
git cherry-pick --continue
# O kanselahin ang cherry-pick:
git cherry-pick --abort
Cherry-pick ay optimal sa mga scenario kung saan kinakailangan ang tumpak na paglilipat ng mga pagbabago nang walang pagsasama ng buong branch. Tingnan natin ang limang pangunahing kaso kung saan ang cherry-pick ang nagiging pinakamahusay na pagpipilian.
Para sa mobile development, ang cherry-pick ay kritikal na mahalaga sa pagsuporta ng maraming bersyon ng application. Halimbawa, kung ang bug ay natagpuan sa bersyon 3.2 na nailabas na sa Google Play, habang ang develop ay naglalaman ng code para sa bersyon 4.0 — pinapayagan ng cherry-pick na ilipat ang pag-aayos sa branch na v3.x nang hindi isinasama ang lahat ng breaking changes. Ito ay lalong mahalaga para sa mga proyekto kung saan dalawa o higit pang pangunahing bersyon na may magkakaibang API at dependencies ay sinusuportahan nang sabay-sabay.
Halimbawa mula sa praktika: sa isang mobile application ay natuklasan ang crash sa pag-authoreyt sa pamamagitan ng Google Sign-In sa Android 12. Ang pag-aayos ay ipinasok sa develop at nakapasa sa review. Ngunit ang kasalukuyang release branch na v2.5 ay nasa beta testing phase na. Ang cherry-pick ng commit ng pag-aayos mula develop papuntang release/v2.5 ay nagpapahintulot na isama ang pag-aayos sa susunod na release, nang hindi inililipat ang iba pang mga pagbabago na hindi pa handa para sa paglabas.
Sa paggamit ng cherry-pick sa mga mobile project, mahalagang isaalang-alang ang mga dependency: kung ang pag-aayos ay nakakaapekto sa mga file na binago sa develop pagkatapos ng punto ng paghihiwalay ng release branch, ang cherry-pick ay maaaring magdala ng hindi kumpletong set ng mga pagbabago. Sa ganitong mga kaso, kailangan suriin kung ang lahat ng kaugnay na pagbabago ay nailipat din, kung hindi ay maaaring hindi mag-compile ang application o gumana nang hindi tama. Palaging suriin ang build pagkatapos ng cherry-pick bago itulak ang mga pagbabago sa shared branch.
Tatlong pangunahing kasangkapan ng integrasyon ng mga pagbabago sa Git — merge, rebase at cherry-pick — ay lumulutas ng magkakaibang mga gawain. Ang pagpili ay depende sa kung gaano karaming pagbabago ang kailangang ilipat at kung paano dapat ang hitsura ng kasaysayan.
| Kriterion | Merge | Rebase | Cherry-pick |
|---|---|---|---|
| Dami | Buong branch | Serye ng mga commit | Piniling mga commit |
| Kasaysayan | Pinapanatili ang pagsasanga | Linear | Linear |
| Merge commit | Oo (maliban sa ff) | Hindi | Hindi |
| Automation | Buong | Sa pamamagitan ng chain | Tanging tinukoy |
| Para sa pampublikong branch | Ligtas | Mapanganib | Ligtas |
Merge — kapag kailangang pagsamahin ang dalawang branch nang buo at panatilihin ang impormasyon tungkol sa pagsasanga. Rebase — kapag kailangang i-update ang personal na branch sa kasalukuyang estado na may malinis na kasaysayan. Cherry-pick — kapag isa lamang commit o ilang piling commit ang kailangan.
Sa praktika, ang mga kasangkapang ito ay pinagsasama: ang feature ay binuo na may pana-panahong rebase sa develop, pagkatapos ay isinasama sa pamamagitan ng --no-ff merge, at kapag kailangang ilipat ang pag-aayos sa ibang branch, ginagamit ang cherry-pick. Bawat kasangkapan ay lumulutas ng sarili nitong gawain sa kani-kaniyang yugto.
Cherry-pick — isang kapaki-pakinabang ngunit potensyal na mapanganib na kasangkapan kung mali o sobra ang paggamit. Ang mga pangunahing panganib ay nauugnay sa pagdodoble ng mga commit, pagkawala ng konteksto at mga conflict sa mga susunod na pagsasama.
Mga rekomendasyon para mabawasan ang mga panganib: laging gamitin ang flag na -x upang ipahiwatig ang orihinal na SHA, idokumento ang dahilan ng cherry-pick sa mensahe ng commit, at kung maaari ay gamitin ang merge sa halip na cherry-pick kapag pinapayagan ng konteksto. Kung maraming cherry-pick — isaalang-alang ang muling pagbubuo ng mga branch.
Mga CI pipeline ay dapat isaalang-alang ang cherry-pick bilang isang hiwalay na scenario. Inirerekomenda na mag-set up ng awtomatikong pagsusuri: sa paggawa ng cherry-pick commit, sinusuri ng CI kung ang mga binagong file ay tumutugma sa inaasahang set at nagpapatakbo ng mga test para sa mga apektadong module. Binabawasan nito ang panganib ng regression sa tumpak na paglilipat ng mga pagbabago sa pagitan ng mga branch.
Mga madalas itanong
Cherry-pick naglilipat ng mga pagbabago mula sa commit patungo sa ibang branch. Revert lumilikha ng bagong commit na nagbabalik sa mga pagbabago ng tinukoy na commit sa parehong branch. Ang Revert ay hindi nagtatanggal ng kasaysayan — nagdaragdag ito ng kabaligtarang pagbabago.
Oo: git cherry-pick A B C — paglilipat ng mga commit A, B at C nang sunud-sunod. O git cherry-pick A..C — paglilipat ng lahat ng commit mula A hanggang C (hindi kasama ang A). Ang pagkakasunod-sunod ng paglilipat ay tumutugma sa pagkakasunod-sunod sa utos.
Bilang default, ang cherry-pick ay hindi gumagana sa merge commit dahil ang merge commit ay may dalawang magulang. Gamitin ang flag na -m 1 upang tukuyin kung aling magulang ang pagkukumparahin. Ang -m 1 ay kumukuha ng diff na may kaugnayan sa unang magulang.
Kanselahin ang cherry-pick ay maaaring gawin sa pamamagitan ng git reset --hard HEAD~1, kung ito ang huling commit. Kung ang commit ay nai-push na — gamitin ang git revert <SHA> upang lumikha ng isang pagkanselang commit.
Walang saysay, ngunit teknikal na posible. Kung ang commit ay umiiral na sa branch, makikita ng Git na ang mga pagbabago ay nailapat na at mag-uulat: “The previous cherry-pick is now empty, possibly due to conflict resolution.” Ang commit ay hindi malilikha muli.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din