Cherry-pick — adalah perintah Git yang menerapkan perubahan dari komit yang ditentukan ke cabang saat ini, tanpa memindahkan seluruh riwayat cabang asli. Berbeda dengan merge atau rebase, cherry-pick bekerja dengan setiap komit secara individual: pengembang memilih komit tertentu berdasarkan hash dan hanya memindahkan perubahannya. Menurut dokumentasi Git (2026), cherry-pick sangat berguna untuk memindahkan perbaikan secara tepat antar cabang rilis, ketika merge secara keseluruhan berlebihan atau berbahaya. Perintah ini membuat komit baru dengan hash baru, tetapi mempertahankan pesan asli dan penulis.
Hal Penting
Cherry-pick — adalah perintah git cherry-pick yang mengambil perubahan dari komit yang ada dan menerapkannya sebagai komit baru di cabang saat ini. Komit asli tetap berada di tempatnya di cabang asli, sementara salinan perubahan dibuat di cabang tujuan. Perintah ini berguna ketika Anda perlu memindahkan perbaikan tertentu tanpa memindahkan seluruh cabang.
Sintaks: git cherry-pick <commit-hash>. Git menganalisis perbedaan (diff) dari komit yang ditentukan dengan induknya dan menerapkan perbedaan ini ke cabang saat ini. Jika perubahan melibatkan beberapa file — semuanya dipindahkan bersama. Perintah ini juga menerima rentang: git cherry-pick A..B — semua komit dari A hingga B, tidak termasuk A.
Flag memperluas kemampuan: -n (--no-commit) menerapkan perubahan ke direktori kerja dan indeks tanpa membuat komit — berguna ketika Anda perlu menggabungkan perubahan dari beberapa komit menjadi satu. Flag -x menambahkan baris (cherry picked from commit ...) ke pesan komit, yang memudahkan pelacakan asal perubahan dalam riwayat.
# Cherry-pick satu komit berdasarkan hash
git cherry-pick a1b2c3d
# Cherry-pick beberapa komit (berurutan)
git cherry-pick a1b2c3d e4f5g6h i6j7k8l
# Cherry-pick tanpa komit otomatis
git cherry-pick -n a1b2c3d
# Flag -x menambahkan referensi ke komit asli
git cherry-pick -x a1b2c3d
Skenario utama — memindahkan perbaikan antar cabang rilis. Bayangkan: di develop ditemukan dan diperbaiki bug kritis. Cabang rilis release/v2.1 sudah dipisahkan dan bug ini juga ada di dalamnya. Merge seluruh develop ke release akan membawa banyak kode yang belum siap, sementara cherry-pick satu komit perbaikan adalah solusi yang aman dan tepat.
Skenario kedua — membatalkan perubahan (revert) dengan pemulihan selanjutnya. Jika komit telah dibatalkan melalui git revert, dan kemudian ternyata pembatalan itu salah — cherry-pick komit yang dibatalkan akan memulihkan perubahan. Ini lebih tepat daripada membatalkan revert, karena tidak menimbulkan konflik berulang.
Skenario ketiga — menggabungkan komit dari berbagai cabang fitur ke dalam satu cabang pengujian untuk pengujian integrasi. Alih-alih menggabungkan beberapa cabang yang belum selesai (dengan kode yang belum jadi), Anda dapat memilih hanya komit yang sudah jadi dari masing-masing cabang dan menguji kerja sama mereka.
Cherry-pick berbeda dari rebase dan merge karena bekerja pada tingkat komit individual, bukan seluruh cabang. Jika rebase memindahkan semua komit cabang, dan merge menggabungkan dua cabang, maka cherry-pick hanya memilih yang diperlukan. Ini membuatnya menjadi alat yang lebih tepat, tetapi juga lebih manual.
Perbedaan lainnya — kepengarangan. Saat cherry-pick, Git secara default mempertahankan penulis (Author) komit asli, tetapi committer (Committer) menjadi pengguna saat ini. Dalam pesan komit, asal dapat dilacak melalui flag -x. Pada rebase, penulis dan committer keduanya adalah pengguna saat ini dengan hash baru.
Kinerja: cherry-pick satu komit lebih cepat daripada merge dua cabang dengan banyak komit. Tetapi jika perlu memindahkan puluhan komit, lebih baik membuat cabang sementara dan melakukan rebase — ini lebih efisien dan tidak memerlukan menentukan puluhan hash.
| Operasi | Lingkup penerapan | Efek samping |
|---|---|---|
| Cherry-pick | Komit individual | Hash baru, duplikasi kode |
| Rebase | Semua komit cabang | Penulisan ulang riwayat, hash baru |
| Merge | Penggabungan penuh cabang | Komit merge, mempertahankan riwayat |
Beberapa komit dapat dipindahkan dengan satu perintah, dengan mencantumkan hash-nya yang dipisahkan spasi: git cherry-pick A B C. Git menerapkan komit secara berurutan dalam urutan yang ditentukan. Jika salah satu komit menyebabkan konflik, cherry-pick berhenti dan pengembang harus menyelesaikan konflik, setelah itu dapat melanjutkan dengan perintah git cherry-pick --continue.
Rentang komit: git cherry-pick A..B (semua komit setelah A hingga B, tidak termasuk A) dan git cherry-pick A^..B (semua komit dari A termasuk hingga B). Rentang berguna ketika perlu memindahkan semua komit dari satu cabang tetapi tanpa hubungan induk — misalnya, saat memindahkan fitur yang sudah jadi dari cabang lama ke cabang baru.
Flag --strategy menentukan bagaimana Git akan menerapkan perubahan. Secara default, strategi recursive digunakan, tetapi Anda dapat menentukan ours atau theirs untuk pemilihan otomatis sisi konflik. Flag --mainline digunakan saat cherry-pick komit merge — menentukan nomor induk (1 atau 2) relatif terhadap mana diff dihitung.
# Cherry-pick rentang komit
git cherry-pick develop~5..develop~2
# Cherry-pick komit merge (tentukan induk)
git cherry-pick -m 1 m9n0o1p
# Menggunakan strategi theirs
git cherry-pick --strategy=recursive \
--strategy-option=theirs a1b2c3d
# Lanjutkan setelah penyelesaian konflik
git cherry-pick --continue
Konflik saat cherry-pick terjadi ketika perubahan dari komit yang dipindahkan menyentuh baris yang sama yang telah diubah di cabang tujuan. Git menghentikan eksekusi, menandai file yang bertentangan, dan menunggu penyelesaian. Dalam status, file tersebut ditampilkan sebagai both modified.
Langkah-langkah saat konflik: buka file yang bertentangan, temukan penanda konflik (<<<<<<<, =======, >>>>>>>), edit konten, hapus penanda, jalankan git add untuk file yang telah diselesaikan, dan jalankan git cherry-pick --continue. Jika konflik tidak dapat diselesaikan — git cherry-pick --abort membatalkan seluruh cherry-pick, mengembalikan cabang ke keadaan semula.
Masalah umum: komit sudah berisi perubahan yang setara dengan yang sudah ada. Dalam kasus ini, Git melaporkan «nothing to commit» atau «empty commit» saat mencoba cherry-pick. Flag --keep-redundant-commits dan --empty=keep memaksa Git untuk membuat komit kosong untuk mempertahankan urutan, sementara --skip memungkinkan melewatkan komit tersebut.
# Konflik saat cherry-pick — berhenti
git cherry-pick a1b2c3d
# error: could not apply a1b2c3d... commit message
# Selesaikan konflik → tambahkan ke indeks
git add src/conflicted_file.swift
git cherry-pick --continue
# Lewati komit kosong (sudah diterapkan)
git cherry-pick --skip
# Batalkan sepenuhnya
git cherry-pick --abort
Aturan pertama: selalu periksa apakah komit yang dipindahkan mandiri. Jika komit A bergantung pada perubahan di komit B yang tidak dipindahkan, cherry-pick A dapat merusak build. Sebelum cherry-pick, ada baiknya memeriksa file apa saja yang diubah oleh komit melalui git show --stat <hash>.
Aturan kedua: dokumentasikan cherry-pick. Gunakan flag -x agar pesan komit menyimpan referensi ke komit asli. Ini akan membantu dalam analisis riwayat selanjutnya untuk memahami dari mana perubahan berasal. Tanpa -x, cherry-pick terlihat seperti komit biasa, dan asalnya hanya dapat dilacak melalui git log --graph.
Aturan ketiga: hindari cherry-pick antar cabang yang terlalu berbeda. Jika sudah banyak waktu berlalu sejak pembuatan komit dan basis kode telah berubah secara signifikan, konflik akan banyak dan rumit. Dalam kasus seperti itu, lebih baik membuat perbaikan baru di cabang tujuan — ini akan memakan waktu lebih sedikit daripada menyelesaikan puluhan konflik.
Pertanyaan yang Sering Diajukan
Cherry-pick — menerapkan perubahan dari komit yang ditentukan ke cabang saat ini melalui git cherry-pick. Perintah ini membuat komit baru dengan perubahan yang sama tetapi hash baru. Komit asli tetap tidak berubah di cabangnya. Ini adalah alternatif untuk menggabungkan seluruh cabang ketika hanya satu komit tertentu yang diperlukan.
Cherry-pick dipilih ketika perlu memindahkan satu atau beberapa komit tertentu tanpa memindahkan seluruh cabang. Merge digunakan untuk penggabungan penuh cabang. Skenario umum cherry-pick — memindahkan perbaikan bug dari cabang pengembangan ke cabang rilis, di mana perubahan lainnya belum siap.
Sebelum selesai — git cherry-pick --abort membatalkan operasi sepenuhnya. Setelah berhasil selesai — git revert <hash> membuat komit yang membatalkan perubahan cherry-pick. Perbedaan dari --abort: revert tidak menghapus komit dari riwayat, tetapi membuat komit pembatalan baru.
Komit kosong terjadi ketika perubahan sudah ada di cabang tujuan. Gunakan git cherry-pick --skip untuk melewatkan komit tersebut, atau git cherry-pick --keep-redundant-commits untuk membuat komit kosong guna mempertahankan urutan hash.
Cherry-pick memindahkan komit yang dipilih (satu per satu atau sebagai daftar) ke cabang saat ini. Rebase memindahkan semua komit cabang ke basis baru. Cherry-pick tidak mengubah cabang asli, rebase menulis ulang riwayat. Cherry-pick tepat tetapi manual; rebase otomatis tetapi berbahaya untuk cabang publik.
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.
Baca juga