Cherry-pick: apa itu, bagaimana melakukan cherry-pick dan perintah Git

Penulis: IT Sectr Diterbitkan: 2026-08-01 Waktu membaca: 8 mnt

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 — pemindahan komit individual dari satu cabang ke cabang lain berdasarkan hash-nya.
  • Hash baru — setiap cherry-pick membuat komit baru dengan perubahan yang disalin dari komit asli.
  • Beberapa komit sekaligus — git cherry-pick A B C memindahkan komit yang ditentukan secara berurutan.
  • Cabang rilis — skenario utama: memindahkan perbaikan bug dari develop ke release tanpa kode yang tidak perlu.
  • Konflik mungkin terjadi — saat menerapkan komit, Git mungkin meminta penyelesaian konflik.

Apa itu cherry-pick di Git

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.

bash
# 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

Kapan menggunakan cherry-pick

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.

  • Perbaikan bug — memindahkan perbaikan dari develop ke release tanpa kode yang belum selesai.
  • Hotfix — menerapkan perbaikan dari cabang hotfix ke main dan develop secara bersamaan.
  • Pembatalan revert yang salah — cherry-pick komit yang dibatalkan untuk memulihkan perubahan.
  • Pengujian — mengumpulkan komit terpilih dari berbagai cabang untuk pemeriksaan integrasi.

Cherry-pick vs rebase dan merge

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.

OperasiLingkup penerapanEfek samping
Cherry-pickKomit individualHash baru, duplikasi kode
RebaseSemua komit cabangPenulisan ulang riwayat, hash baru
MergePenggabungan penuh cabangKomit merge, mempertahankan riwayat

Memindahkan beberapa komit

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.

bash
# 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

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.

bash
# 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

Praktik terbaik cherry-pick

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.

  • Cherry-pick hanya komit mandiri tanpa ketergantungan eksternal.
  • Flag -x wajib untuk mendokumentasikan asal komit dalam pesan.
  • Hindari cherry-pick komit lama dengan perbedaan besar dalam basis kode.
  • CI/CD periksa build setelah cherry-pick: konflik mungkin tidak terjadi, tetapi kode mungkin tidak dapat dikompilasi.
  • Komentar di PR saat membuat pull request, sebutkan komit mana yang dipindahkan melalui cherry-pick.

Pertanyaan yang Sering Diajukan

Apa artinya cherry-pick komit?

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.

Kapan cherry-pick diperlukan daripada merge?

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.

Bisakah cherry-pick dibatalkan?

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.

Apa yang harus dilakukan jika cherry-pick membuat komit kosong?

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.

Apa perbedaan cherry-pick dengan rebase?

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

  • Cherry-pick — perintah untuk memindahkan komit individual antar cabang dengan mempertahankan perubahan dan membuat hash baru.
  • Skenario utama — memindahkan perbaikan antar cabang rilis tanpa memindahkan seluruh riwayat atau kode yang belum siap.
  • Beberapa komit dipindahkan dengan satu perintah melalui pencantuman hash atau rentang A..B.
  • Konflik diselesaikan sama seperti merge: mengedit file, git add, git cherry-pick --continue.
  • Flag -x menambahkan referensi ke komit asli untuk transparansi riwayat.
  • Pembatalan dilakukan melalui --abort sebelum selesai atau git revert setelahnya.
  • Risiko: cherry-pick komit yang bergantung dan perubahan yang terlalu lama dapat menyebabkan banyak konflik.

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.

Diskusikan proyek

Baca juga