Cherry-pick — adalah perintah Git yang menerapkan perubahan dari satu atau beberapa commit yang ada ke cabang saat ini. Berbeda dengan Merge (memindahkan seluruh cabang) dan Rebase (memindahkan urutan commit), cherry-pick hanya memilih commit yang ditentukan. Menurut git-scm.com, 2025, cherry-pick paling banyak digunakan dalam skenario pemindahan perbaikan antar cabang rilis.
Poin utama
Cherry-pick — adalah perintah Git yang menyalin perubahan dari commit yang ditentukan dan menerapkannya sebagai commit baru di cabang saat ini. Nama ini berasal dari metafora “memetik ceri”: pengembang hanya memilih commit yang diperlukan, mengabaikan sisanya.
Berbeda dengan Merge, cherry-pick tidak membuat merge commit dan tidak memerlukan penggabungan penuh cabang. Berbeda dengan Rebase, cherry-pick tidak memindahkan urutan commit — hanya yang ditentukan. Ini menjadikan cherry-pick alat yang ideal untuk pemindahan perbaikan yang tepat.
Menurut data Atlassian, 2025, cherry-pick digunakan di 47% tim yang bekerja dengan beberapa cabang rilis secara bersamaan. Cherry-pick sangat dibutuhkan dalam pengembangan mobile, di mana beberapa versi aplikasi (rilis LTS) didukung secara bersamaan dan diperlukan pemindahan perbaikan di antara mereka.
Saat menjalankan cherry-pick, Git menghitung diff antara commit yang ditentukan dan induknya, kemudian menerapkan diff ini ke cabang saat ini. Jika perubahan diterapkan tanpa konflik — Git membuat commit baru dengan pesan yang sama tetapi SHA baru. Jika ada konflik — cherry-pick dijeda untuk penyelesaian manual.
Sintaks cherry-pick sederhana: tentukan hash commit yang ingin dipindahkan. Git akan menyalin perubahan ke cabang saat ini sebagai commit baru. Pemindahan beberapa commit sekaligus dan seluruh rentang didukung.
# Memindahkan satu commit ke cabang saat ini
git cherry-pick a1b2c3d4
# Memindahkan beberapa commit
git cherry-pick a1b2c3d4 e5f6g7h8
# Memindahkan rentang commit (dari a1b2 hingga f9e8, tidak termasuk a1b2)
git cherry-pick a1b2c3d4..f9e8d7c6
Setelah menjalankan cherry-pick, cabang saat ini menerima commit baru dengan perubahan dari yang asli. Pesan commit secara default disalin dari yang asli, tetapi dapat diubah dengan flag -n (jangan buat commit) atau --edit (edit pesan).
Pertimbangkan skenario tipikal: di develop ditemukan dan diperbaiki bug kritis yang juga ada di cabang rilis release/v2.0. Hanya perbaikan ini yang perlu dipindahkan, tanpa menggabungkan seluruh develop ke cabang rilis.
# Temukan hash commit dengan perbaikan di develop
git log --oneline develop
# a1b2c3d fix: null check in payment processing
# Beralih ke cabang rilis
git checkout release/v2.0
# Terapkan perbaikan
git cherry-pick a1b2c3d4
# Jika ada konflik — selesaikan dan lanjutkan
git add src/payment/PaymentProcessor.kt
git cherry-pick --continue
Flag -x menambahkan referensi ke SHA asli ke dalam pesan commit: “(cherry picked from commit a1b2c3d4)”. Ini memudahkan pelacakan dari mana commit dipindahkan. Disarankan menggunakan -x di semua skenario, kecuali draf sementara.
Saat konflik, cherry-pick berperilaku seperti merge: Git berhenti dan menandai file yang bertentangan. Pengembang menyelesaikan konflik, melakukan git add dan kemudian git cherry-pick --continue. Untuk membatalkan — git cherry-pick --abort. Flag --strategy memungkinkan menentukan strategi penggabungan (misalnya, recursive dengan opsi).
# Menyelesaikan konflik saat cherry-pick
# Git menampilkan file yang bertentangan
git status
# Selesaikan secara manual, lalu:
git add file_yang_diizinkan.kt
git cherry-pick --continue
# Atau batalkan cherry-pick:
git cherry-pick --abort
Cherry-pick optimal dalam skenario di mana diperlukan pemindahan perubahan yang tepat tanpa menggabungkan seluruh cabang. Mari kita lihat lima kasus utama di mana cherry-pick menjadi pilihan terbaik.
Untuk pengembangan mobile, cherry-pick sangat penting saat mendukung beberapa versi aplikasi. Misalnya, jika bug ditemukan di versi 3.2 yang sudah dirilis di Google Play, sementara develop berisi kode untuk versi 4.0 — cherry-pick memungkinkan pemindahan perbaikan ke cabang v3.x tanpa menggabungkan semua breaking changes. Ini sangat relevan untuk proyek di mana dua atau lebih versi utama dengan API dan dependensi berbeda didukung secara bersamaan.
Contoh dari praktik: dalam aplikasi mobile ditemukan crash saat otorisasi melalui Google Sign-In di Android 12. Perbaikan dimasukkan ke develop dan telah melewati review. Namun cabang rilis saat ini v2.5 sudah dalam tahap pengujian beta. Cherry-pick commit perbaikan dari develop ke release/v2.5 memungkinkan perbaikan disertakan dalam rilis berikutnya, tanpa memindahkan perubahan lain yang belum siap untuk dirilis.
Saat menggunakan cherry-pick di proyek mobile penting untuk mempertimbangkan dependensi: jika perbaikan memengaruhi file yang diubah di develop setelah titik percabangan cabang rilis, cherry-pick dapat membawa set perubahan yang tidak lengkap. Dalam kasus seperti itu, perlu diperiksa apakah semua perubahan terkait juga telah dipindahkan, jika tidak aplikasi mungkin tidak dapat dibangun atau berfungsi dengan tidak benar. Selalu periksa build setelah cherry-pick sebelum mendorong perubahan ke cabang bersama.
Tiga alat utama integrasi perubahan di Git — merge, rebase dan cherry-pick — menyelesaikan tugas yang berbeda. Pilihan tergantung pada berapa banyak perubahan yang perlu dipindahkan dan bagaimana sejarah harus terlihat.
| Kriteria | Merge | Rebase | Cherry-pick |
|---|---|---|---|
| Volume | Seluruh cabang | Seri commit | Commit yang dipilih |
| Sejarah | Mempertahankan percabangan | Linear | Linear |
| Merge commit | Ya (kecuali ff) | Tidak | Tidak |
| Otomatisasi | Penuh | Berantai | Hanya yang ditentukan |
| Untuk cabang publik | Aman | Berbahaya | Aman |
Merge — ketika dua cabang perlu digabungkan sepenuhnya dan informasi tentang percabangan dipertahankan. Rebase — ketika cabang pribadi perlu diperbarui ke keadaan saat ini dengan sejarah yang bersih. Cherry-pick — ketika hanya satu commit atau beberapa commit yang dipilih diperlukan.
Dalam praktiknya, alat-alat ini dikombinasikan: fitur dikembangkan dengan rebase periodik ke develop, kemudian digabungkan melalui --no-ff merge, dan ketika perlu memindahkan perbaikan ke cabang lain, cherry-pick digunakan. Setiap alat menyelesaikan tugasnya pada tahapnya masing-masing.
Cherry-pick — alat yang berguna tetapi berpotensi berbahaya jika digunakan secara tidak benar atau berlebihan. Risiko utama terkait dengan duplikasi commit, kehilangan konteks, dan konflik pada penggabungan selanjutnya.
Rekomendasi untuk meminimalkan risiko: selalu gunakan flag -x untuk menunjukkan SHA asli, dokumentasikan alasan cherry-pick di pesan commit, dan bila memungkinkan gunakan merge daripada cherry-pick ketika konteks memungkinkan. Jika cherry-pick terlalu banyak — pertimbangkan restrukturisasi cabang.
Pipeline CI harus mempertimbangkan cherry-pick sebagai skenario terpisah. Disarankan untuk mengatur pemeriksaan otomatis: saat membuat commit cherry-pick, CI memeriksa apakah file yang diubah sesuai dengan set yang diharapkan dan menjalankan tes untuk modul yang terpengaruh. Ini mengurangi risiko regresi saat pemindahan perubahan yang tepat antar cabang.
Pertanyaan yang sering diajukan
Cherry-pick memindahkan perubahan dari commit ke cabang lain. Revert membuat commit baru yang membatalkan perubahan commit yang ditentukan di cabang yang sama. Revert tidak menghapus sejarah — ia menambahkan perubahan terbalik.
Ya: git cherry-pick A B C — pemindahan commit A, B dan C secara berurutan. Atau git cherry-pick A..C — pemindahan semua commit dari A hingga C (tidak termasuk A). Urutan pemindahan sesuai dengan urutan dalam perintah.
Secara default, cherry-pick tidak bekerja dengan merge commit karena merge commit memiliki dua induk. Gunakan flag -m 1 untuk menentukan dengan induk mana akan dibandingkan. -m 1 mengambil diff relatif terhadap induk pertama.
Membatalkan cherry-pick dapat dilakukan melalui git reset --hard HEAD~1, jika ini adalah commit terakhir. Jika commit sudah didorong — gunakan git revert <SHA> untuk membuat commit pembatalan.
Tidak ada gunanya, tetapi secara teknis mungkin. Jika commit sudah ada di cabang, Git akan mendeteksi bahwa perubahan sudah diterapkan dan melaporkan: “The previous cherry-pick is now empty, possibly due to conflict resolution.” Commit tidak akan dibuat lagi.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.