Untuk melakukan cherry-pick pada commit yang saling bergantung di macOS, pertama-tama identifikasi commit prasyarat dan terapkan sebelum commit yang bergantung padanya. Di Terminal, periksa riwayat cabang sumber, pastikan cabang tujuan memiliki working tree yang bersih, lalu lakukan cherry-pick pada ID commit yang dipilih sesuai urutan ketergantungannya. Git akan menerapkan perubahan dari setiap commit dan membuat commit baru pada cabang yang sedang Anda checkout; Git tidak secara otomatis menentukan perubahan mana yang dibutuhkan oleh cabang tujuan Anda. Dokumentasi git-cherry-pick Git

Urutan apa yang sebaiknya digunakan untuk commit yang saling bergantung?

Terapkan prasyarat sebelum perubahan yang bergantung padanya. Misalnya, jika commit a1b2c3 menambahkan suatu fungsi dan commit d4e5f6 memanggil fungsi tersebut, pilih a1b2c3 terlebih dahulu dan d4e5f6 kedua. Jika commit kedua membutuhkan berkas, antarmuka, atau perilaku yang diperkenalkan oleh commit pertama, membalik urutannya dapat menyebabkan konflik atau meninggalkan tujuan dalam kondisi perantara yang rusak.

Gunakan urutan induk-ke-anak (parent-to-child) dari cabang sumber sebagai titik awal Anda. Panduan alur kerja Git menyarankan untuk membagi pekerjaan menjadi commit-commit logis yang konsisten dan dapat bekerja secara independen; riwayat di dunia nyata mungkin tidak selalu memenuhi kondisi ideal tersebut, jadi periksalah perubahan apa saja yang dibawa oleh setiap commit yang dipilih dan apa ketergantungannya. Cherry-picking menyalin perubahan commit secara individual, sedangkan merging menggabungkan perubahan pada tingkat cabang. Jika Anda membutuhkan keseluruhan cabang beserta riwayatnya, pertimbangkan apakah merge lebih cocok daripada memilih commit satu per satu. Dokumentasi gitworkflows Git

Periksa riwayat di Terminal

Buka Terminal di Mac Anda, berpindahlah ke folder repositori, dan periksa status saat ini. Ganti jalur dalam tanda kutip dengan jalur sebenarnya dari repositori Anda; tanda kutip memungkinkan adanya spasi pada nama folder.

cd "/path/to/your/repository"
git status --short --branch
git log --graph --oneline --decorate --all

Perintah pertama mengubah direktori kerja Terminal. git status menampilkan cabang yang sedang di-checkout dan setiap perubahan lokal. Tampilan grafik membantu Anda melihat commit mana saja yang ada di cabang sumber beserta urutannya. macOS Terminal menggunakan zsh secara default, dan perintah-perintah di atas menggunakan sintaks shell standar yang didukung di sana. Panduan Terminal Apple

Jika cabang yang dibutuhkan adalah cabang pelacak jarak jauh (remote tracking branch) dan status terbarunya belum ada secara lokal, lakukan fetch sebelum memeriksanya:

git fetch origin
git log --reverse --oneline origin/feature-name

Ganti origin/feature-name dengan nama cabang jarak jauh yang sebenarnya. Opsi reverse menampilkan commit dengan urutan dari yang paling lama ke yang terbaru. Untuk riwayat yang panjang, batasi log pada commit-commit setelah basis bersama yang diketahui, misalnya git log --reverse --oneline base-commit..origin/feature-name. Baca subjek yang dihasilkan, lalu periksa kandidat perubahan dengan git show COMMIT_ID. Rentang commit memang nyaman untuk peninjauan, tetapi jangan berasumsi bahwa argumen rentang itu sendiri menjamin urutan ketergantungan khusus yang Anda butuhkan: ID commit yang eksplisit memastikan urutan yang dimaksud menjadi jelas.

Lakukan cherry-pick sesuai urutan prasyarat

Sebelum memulai, lakukan commit atau sisihkan perubahan lokal dengan aman. Operasi cherry-pick normal membutuhkan working tree yang bersih, dan Anda harus memastikan cabang tujuan sebelum menerapkan apa pun. Ganti ID contoh dengan ID commit lengkap atau singkatan yang sebenarnya, diurutkan dari prasyarat ke yang bergantung:

git switch destination-branch
git status --short --branch
git cherry-pick a1b2c3 d4e5f6

Git akan membuat commit baru untuk setiap perubahan yang dipilih sesuai urutan yang diberikan. Periksa output dengan saksama: jika suatu perubahan sudah disertakan melalui jalur lain, atau cabang tujuan telah mengalami divergensi, Git dapat melaporkan perubahan kosong atau berhenti karena adanya konflik. Setelah itu, periksa riwayat dan working tree yang dihasilkan dengan git log --oneline -n 5 dan git status. Jalankan pemeriksaan terkait pada proyek sebelum mengandalkan hasilnya; cherry-pick yang bersih hanya berarti Git telah menerapkan perubahan tersebut, bukan berarti fiturnya berfungsi seperti yang diharapkan.

Jika commit mengalami konflik

Ketika sebuah pick mengalami konflik, Git akan berhenti sejenak pada commit tersebut. Periksa berkas-berkas yang terpengaruh dan selesaikan setiap konflik dengan menggabungkan perubahan sumber yang diinginkan dengan konten saat ini pada cabang tujuan. Lakukan stage pada berkas yang telah diselesaikan menggunakan git add dan lanjutkan rangkaian prosesnya:

git add "path/to/resolved-file"
git cherry-pick --continue

Gunakan git cherry-pick --abort untuk membatalkan urutan saat ini dan kembali ke kondisi sebelum proses dimulai. Gunakan git cherry-pick --skip hanya jika Anda telah memutuskan bahwa perubahan commit saat ini harus diabaikan; commit berikutnya mungkin bergantung padanya, sehingga melewatinya dapat membuat perubahan tersebut gagal atau kehilangan fungsinya. Git mendokumentasikan continue, skip, dan abort sebagai kontrol untuk operasi yang sedang berlangsung. Opsi sequencer git-cherry-pick Git

Untuk merge commit, berhentilah sejenak sebelum memilihnya: Git memerlukan penentuan induk jalur utama (mainline parent) karena proses merge memiliki lebih dari satu induk. Begitu pula jika commit-commit setelahnya tidak dapat dipahami tanpa rantai panjang perubahan sebelumnya, memilih hanya sebagian kecil commit mungkin tidak akan menghasilkan keluaran yang koheren. Periksa ketergantungannya dan pilihlah urutan lengkap terkecil yang tetap mempertahankan ketergantungan tersebut.

Sumber