Last chance! 50% off DataCamp Premium
Sale ends in
Bekerja dengan branch dalam lingkungan pengembangan perangkat lunak kolaboratif sangat penting untuk mengisolasi fitur, perbaikan bug, atau eksperimen. Namun, ada kalanya Anda perlu mengambil perubahan tertentu dari satu branch dan menerapkannya ke branch lain tanpa melakukan merge seluruh branch. Di sinilah git cherry-pick menjadi sangat berharga.
Tujuan tutorial ini adalah memberikan panduan komprehensif tentang cara menggunakan git cherry-pick secara efektif. Anda akan mempelajari sintaks perintahnya, memahami cara menangani konflik, serta menjelajahi praktik terbaik dan kesalahan umum yang perlu dihindari. Mari kita mulai!
Perintah git cherry-pick adalah perintah dasar Git yang memberi pengembang kendali terperinci atas kode sumber mereka.
Berbeda dengan operasi Git lainnya, seperti merge atau rebase yang bekerja pada seluruh branch, cherry-pick memungkinkan Anda mengambil commit tertentu dari satu branch dan menerapkannya ke branch lain. Ini memberikan presisi, terutama dalam skenario ketika Anda hanya perlu mengintegrasikan perubahan tertentu alih-alih semua modifikasi dalam suatu branch.
Perintah git cherry-pick bekerja dengan menyalin konten commit yang dipilih dan membuat commit baru di branch target, sekaligus menjaga integritas riwayat commit.
Kasus penggunaan git cherry-pick meliputi:
Memahami sintaks git cherry-pick adalah kunci untuk menggunakan perintah ini secara efektif. Ini bukan hanya tentang memilih commit, tetapi menerapkannya dengan tepat untuk mencapai hasil yang diinginkan.
Sintaks dasar untuk melakukan cherry-pick pada satu commit adalah:
git cherry-pick <commit-hash>
git cherry-pick: Perintah yang memulai operasi.<commit-hash>: Pengenal unik (hash SHA-1) dari commit yang ingin Anda cherry-pick. Hash ini dapat ditemukan dengan menjalankan git log untuk menampilkan riwayat commit.Saat mengeksekusi perintah di atas, Git akan menerapkan perubahan dari commit yang ditentukan ke branch saat ini, membuat commit baru dengan perubahan yang sama tetapi hash yang berbeda.
Penting untuk dicatat bahwa perintah ini hanya mentransfer commit itu sendiri, bukan konteks atau riwayat induk dari branch asal.
Baru mengenal Git dan GitHub? Mulailah dengan kontrol versi dalam tutorial ramah pemula GitHub dan Git.
Sekarang Anda memahami sintaks dasar git cherry-pick, saatnya melihat perintah ini beraksi.
Bagian ini menyediakan contoh praktis yang memandu Anda melalui skenario umum, baik dasar maupun lebih kompleks, di mana cherry-picking bermanfaat. Setiap contoh menunjukkan cara menerapkan perubahan dari satu atau beberapa commit ke branch lain.
Misalkan Anda telah membuat perbaikan pada feature branch yang ingin Anda terapkan ke main branch tanpa melakukan merge seluruh feature branch.
git log
git checkout main
abc1234): git cherry-pick abc1234
Saat Anda menjalankan perintah ini, Git akan menerapkan perubahan dari commit yang diidentifikasi oleh abc1234 ke branch saat ini (dalam kasus ini main). Git membuat commit baru pada main branch yang berisi perubahan yang sama seperti commit asli, tetapi dengan hash commit baru.
Dalam beberapa situasi, Anda mungkin perlu menerapkan beberapa commit terpisah dari satu branch ke branch lain. Misalkan Anda memiliki tiga commit terpisah di feature branch yang perlu Anda bawa ke main branch.
git log:git log
git checkout main
git cherry-pick abc1234 def5678 ghi7890
Misalkan Anda telah membuat serangkaian commit pada feature branch dan ingin menerapkannya ke main branch sekaligus tanpa menyebutkan tiap commit satu per satu. Bagaimana caranya?
git log untuk mengidentifikasi commit awal dan akhir yang ingin Anda cherry-pick (misalnya, abc1234 hingga ghi7890).git checkout main
git cherry-pick abc1234...ghi7890
Terkadang ada perbaikan penting di branch remote, dan Anda ingin menerapkannya ke branch lokal tanpa melakukan merge seluruh branch. Berikut caranya:
git fetch origin
git log origin/feature_branch --oneline
abc1234.git checkout main
git cherry-pick abc1234
Ini memungkinkan Anda menerapkan commit dari branch remote tanpa melakukan merge seluruh branch.
Perlu checkout branch remote? Ikuti panduan langkah demi langkah tentang Git checkout untuk branch remote.
Jika Anda melakukan cherry-pick pada sebuah commit tetapi perlu sedikit memodifikasinya sebelum meng-commit, Anda dapat menggunakan mode interaktif Git. Berikut caranya:
git checkout main
git cherry-pick -n abc1234
Flag -n (atau --no-commit) menerapkan perubahan tetapi tidak membuat commit.
git add .
git commit -m "Modified cherry-picked commit from feature_branch"
Ini berguna saat Anda perlu menyempurnakan commit hasil cherry-pick sebelum memfinalkannya.
Konflik tidak terhindarkan saat melakukan cherry-pick antar branch, terutama ketika basis kode telah banyak menyimpang.
Meskipun cherry-pick dirancang untuk menerapkan perubahan secara bersih, tidak selalu dapat menyelaraskan perbedaan secara otomatis. Dalam kasus ini, konflik harus diselesaikan secara manual. Memahami bagaimana konflik muncul dan cara menanganinya sangat penting untuk menyelesaikan operasi cherry-pick.
Konflik biasanya terjadi ketika perubahan dari commit hasil cherry-pick tumpang tindih atau bertentangan dengan perubahan yang sudah ada di branch target. Misalnya:
Saat konflik terjadi, Git akan menghentikan operasi cherry-pick, membiarkan direktori kerja Anda dalam keadaan konflik yang harus diselesaikan sebelum melanjutkan.
Saat konflik muncul, Git akan menunjukkan file yang berkonflik, dan Anda perlu menyelesaikan perbedaannya secara manual. Berikut cara menyelesaikan konflik:
1. Periksa file yang berkonflik: Jalankan perintah berikut untuk melihat file mana yang berkonflik:
git status
Perintah ini akan menampilkan daftar file yang mengalami konflik.
2. Selesaikan konflik: Anda dapat mengedit file yang berkonflik secara manual untuk menyelesaikan masalah. Hapus penanda konflik (<<<<<<<, =======, >>>>>>>) dan tentukan perubahan mana yang akan dipertahankan atau bagaimana menggabungkannya.
3. Gunakan Git Mergetool (opsional): Jika menyelesaikan konflik secara manual terasa rumit, Anda dapat menggunakan merge tool untuk membantu memvisualisasikan dan menyelesaikan konflik:
git mergetool
Tergantung pada konfigurasi Anda, alat di atas akan membuka visual merge tool, yang memudahkan peninjauan dan penyelesaian konflik.
4. Tandai konflik sebagai terselesaikan: Setelah menyelesaikan konflik, tandai file sebagai terselesaikan menggunakan:
git add <conflicted-file>
5. Selesaikan cherry-pick: Setelah semua konflik diselesaikan dan file sudah di-stage, finalkan cherry-pick dengan menjalankan:
git cherry-pick --continue
Banyak IDE dan alat modern, seperti Visual Studio Code dan GitHub, menawarkan fitur bawaan untuk menyelesaikan konflik merge. Antarmuka web GitHub memungkinkan Anda menyelesaikan konflik langsung di pull request, sehingga memudahkan kolaborasi pada repositori bersama tanpa beralih ke lingkungan lokal.
Terkadang, menyelesaikan konflik mungkin terlalu rumit, atau Anda menyadari bahwa commit tersebut ternyata tidak diperlukan. Dalam kasus seperti itu, Anda dapat melewati commit sepenuhnya.
1. Batalkan proses cherry-pick saat ini: Jika konfliknya terlalu rumit dan Anda tidak ingin menerapkan commit tersebut, Anda dapat melewatinya dengan menjalankan:
git cherry-pick --skip
Ini akan membatalkan commit yang berkonflik dan melanjutkan ke commit berikutnya (jika Anda melakukan cherry-pick beberapa commit).
2. Batalkan seluruh cherry-pick: Jika Anda ingin membatalkan operasi cherry-pick sepenuhnya, Anda dapat menjalankan:
git cherry-pick --abort
Perintah ini akan mengembalikan direktori kerja Anda ke kondisi sebelum Anda memulai cherry-pick.
Ingin merapikan riwayat commit? Pelajari cara menggabungkan beberapa commit menjadi satu melalui tutorial Git squash.
Penggunaan cherry-pick yang tidak tepat dapat menyebabkan riwayat yang rumit dan kebingungan dalam kontrol versi proyek Anda. Untuk menghindari hal ini, mematuhi praktik terbaik memastikan Anda menggunakan cherry-pick secara efektif tanpa menambah kompleksitas yang tidak perlu pada basis kode Anda.
Cherry-picking paling efektif saat digunakan untuk commit kecil dan spesifik yang menyelesaikan tugas terdefinisi dengan baik, seperti perbaikan bug atau peningkatan fitur minor.
Hindari melakukan cherry-pick pada commit besar dan kompleks yang menggabungkan banyak perubahan, karena ini dapat memicu konflik dan menyulitkan pengelolaan basis kode. Semakin terarah commit tersebut, semakin mudah untuk diterapkan tanpa efek samping yang tidak diinginkan.
Untuk menjaga riwayat tetap jelas, selalu berikan konteks yang tepat saat melakukan cherry-pick. Ini dapat dilakukan melalui pesan commit yang terperinci atau anotasi dalam dokumentasi.
Intinya, Anda harus menjelaskan mengapa cherry-pick diperlukan. Ini sangat penting saat melakukan cherry-pick di antara branch berumur panjang atau lingkungan kolaboratif, karena membantu kontributor di masa mendatang memahami alasan perubahan diterapkan secara selektif.
Sebelum melakukan cherry-pick, tinjau riwayat commit dari branch sumber dan target. Langkah ini membantu mengidentifikasi apakah commit yang akan Anda cherry-pick bergantung pada perubahan lain. Ketergantungan yang hilang dapat menyebabkan fungsionalitas tidak lengkap atau bug, jadi pastikan cherry-pick tidak memperkenalkan fitur atau pembaruan setengah matang.
Meskipun cherry-picking nyaman untuk menerapkan perubahan tertentu, penggunaan berlebihan dapat menyebabkan riwayat terfragmentasi dengan commit duplikat di berbagai branch. Ini dapat menyulitkan penelusuran asal perubahan tertentu atau memahami konteks pengembangan yang lebih luas.
Selalu evaluasi apakah merge atau rebase merupakan strategi yang lebih tepat sebelum melakukan cherry-pick. Gunakan cherry-pick secara hemat dan dengan tujuan agar riwayat commit tidak semrawut.
Kesulitan dengan file yang tidak perlu di Git? Pelajari cara menggunakan .gitignore secara efektif melalui tutorial Git ignore.
Memecahkan masalah yang muncul saat menggunakan cherry-pick membutuhkan pemahaman yang jelas tentang mekanisme dasar Git. Pada bagian ini, saya akan membahas beberapa masalah umum yang mungkin Anda temui saat melakukan cherry-pick dan cara mengatasinya.
Terkadang, Anda mungkin mencoba melakukan cherry-pick pada commit yang tidak dapat diakses dari branch saat ini atau sudah di-merge. Ini biasanya menghasilkan pesan kesalahan yang menyatakan bahwa commit tidak dapat ditemukan atau diterapkan.
1. Commit tidak ditemukan: Ini terjadi ketika hash commit yang Anda coba cherry-pick tidak ada dalam konteks repositori atau branch Anda saat ini. Pastikan Anda merujuk commit yang benar dengan memeriksa riwayat commit menggunakan git log pada branch tempat commit tersebut berada. Solusi:
git fetch.2. Commit sudah diterapkan: Jika commit telah di-merge atau di-cherry-pick ke branch target, Git akan mencegah Anda menduplikasinya. Pengaman ini menjaga riwayat tetap bersih dan menghindari perubahan yang berulang. Solusi:
git log untuk memeriksa apakah commit tersebut sudah ada di branch target.cherry-pick karena perubahannya sudah diterapkan.Cherry-pick setelah rebase atau merge dapat menimbulkan kompleksitas karena riwayat branch Anda berubah. Rebase menulis ulang riwayat commit sementara merge menggabungkan branch, yang keduanya dapat memengaruhi penerapan cherry-pick.
1. Konflik akibat commit yang di-rebase: Setelah rebase, riwayat commit ditulis ulang, yang dapat menimbulkan masalah jika Anda mencoba melakukan cherry-pick pada commit yang telah diubah selama proses rebase. Anda dapat mengalami konflik karena cherry-pick mencoba menerapkan perubahan yang tidak selaras dengan riwayat yang telah ditulis ulang. Solusi:
git log untuk memastikan commit yang akan Anda cherry-pick belum dimodifikasi.cherry-pick standar, menggunakan git status dan pengeditan manual.2. Commit duplikat setelah merge: Menggabungkan branch dapat menyebabkan situasi di mana commit yang ingin Anda cherry-pick sudah termasuk dalam riwayat hasil merge. Melakukannya lagi dapat menghasilkan commit duplikat, yang dapat mengacaukan riwayat dan menyulitkan pelacakan perubahan. Solusi:
Perlu membatalkan perubahan di Git? Pelajari kapan harus menggunakan git reset vs. git revert dalam tutorial Git reset dan revert.
git cherry-pick adalah cara yang kuat untuk menerapkan commit tertentu dari satu branch ke branch lain tanpa melakukan merge seluruh branch. Baik Anda memindahkan perbaikan bug, pembaruan fitur, atau hanya menerapkan perubahan secara selektif, ini membantu menjaga riwayat Git tetap bersih dan terfokus.
Dalam panduan ini, saya membahas cara melakukan cherry-pick pada satu dan beberapa commit, menyelesaikan konflik, serta mengikuti praktik terbaik untuk menghindari jebakan umum. Dengan menggunakan cherry-pick secara bijak, Anda dapat meningkatkan alur kerja sekaligus menjaga repositori tetap teratur.
Jika Anda ingin memperdalam keterampilan Git, lihat Foundations of Git sebagai titik awal yang kuat. Anda juga dapat menjelajahi Introduction to GitHub Concepts atau menempuh pendekatan terstruktur dengan GitHub Foundations skill track.
Sekarang Anda tahu cara melakukan cherry-pick seperti profesional, silakan coba di proyek Anda berikutnya!
Jika Anda mencoba melakukan cherry-pick pada commit yang sudah diterapkan ke branch target, Git mungkin membuat commit duplikat dengan hash baru. Untuk memeriksa apakah commit sudah diterapkan, gunakan:
git log --oneline
Sebagai alternatif, jika Anda tidak yakin, gunakan:
git cherry-pick -n <commit-hash>
Ini menerapkan perubahan tanpa meng-commit-nya, sehingga Anda dapat meninjaunya sebelum memfinalkan.
Ya! Meskipun branch telah dihapus, commit mungkin masih ada dalam riwayat Git.
Gunakan git reflog untuk menemukan hash commit, lalu lakukan cherry-pick seperti biasa.
Namun, jika Git sudah melakukan garbage-collect pada branch tersebut, commit mungkin hilang.
Untuk melakukan cherry-pick dari repositori lain, tambahkan terlebih dahulu sebagai remote:
git remote add other-repo <repository-url>
git fetch other-repo
Lalu, identifikasi commit dan lakukan cherry-pick:
git cherry-pick <commit-hash>Ya, cherry-picking mempertahankan semua perubahan dalam commit, termasuk penghapusan file. Jika sebuah commit menghapus file, melakukan cherry-pick akan menghapus file tersebut di branch target.
Jika Anda salah melakukan cherry-pick dan belum melakukan push, Anda dapat membatalkannya dengan:
git reset --hard HEAD~1
Jika Anda sudah melakukan push untuk cherry-pick tersebut, gunakan:
git revert <commit-hash>
Ini akan membuat commit baru yang membatalkan perubahan hasil cherry-pick.
git cherry-pick menyalin commit tertentu dan menerapkannya ke branch target sambil mempertahankan metadata commit.git apply digunakan untuk menerapkan file patch (dibuat dengan git diff) tetapi tidak membuat commit baru atau mempertahankan riwayat commit.Secara bawaan, git cherry-pick menetapkan Anda sebagai penulis. Untuk mempertahankan penulis commit asli, gunakan:
git cherry-pick -x <commit-hash>
Ini menambahkan referensi ke commit asli dalam pesan commit baru.
Ya! Alih-alih menyebutkan rentang, daftarkan hash commit satu per satu:
git cherry-pick <commit1> <commit2> <commit3>
Ini berguna ketika Anda hanya membutuhkan commit tertentu dari sebuah branch.
Sebelum melakukan cherry-pick, pastikan branch Anda terbaru:
git pull origin main
Selain itu, tinjau riwayat commit untuk memastikan perubahan tidak bergantung pada commit lain yang hilang. Jika terjadi konflik, selesaikan secara manual dan lanjutkan dengan:
git cherry-pick --continuePenggunaan git cherry-pick yang berlebihan dapat menyebabkan riwayat commit berantakan dengan commit yang terduplikasi di berbagai branch. Sebaiknya dihindari ketika:
merge atau rebase mungkin pilihan yang lebih baik.Pelajari lebih lanjut tentang Git dengan kursus-kursus ini!
Kursus
Kursus
Program
blogs
David Woods
13 mnt

blogs
Javier Canales Luna
14 mnt
blogs
Hugo Bowne-Anderson
13 mnt
blogs
Dario Radečić
15 mnt