Ketika datang ke berbagai komitmen, memetik ceri adalah adalah tidak praktis.
Seperti yang disebutkan di bawah oleh Keith Kim , Git 1.7.2+ memperkenalkan kemampuan untuk memilih cherry-pick sejumlah komitmen (tetapi Anda masih perlu menyadari konsekuensi memetik cherry untuk penggabungan di masa depan )
git cherry-pick "belajar memilih serangkaian commit
(mis." cherry-pick A..B"dan" cherry-pick --stdin"), begitu juga" git revert"; ini tidak mendukung kontrol sequencing yang lebih baik" rebase [-i]"miliki.
komentar damian dan memperingatkan kita:
Dalam bentuk " cherry-pick A..B", Aharus lebih tua dariB .
Jika urutannya salah maka perintah akan gagal .
Jika Anda ingin memilih kisaran Bmelalui D(inklusif) yang akan B^..D.
Lihat " Git membuat cabang dari rentang komit sebelumnya? " Sebagai ilustrasi.
Seperti Jubobs menyebutkan dalam komentar :
Ini mengasumsikan bahwa Bitu bukan komit root; Anda akan mendapat unknown revisionkesalahan " " sebaliknya.
Catatan: pada Git 2.9.x / 2.10 (Q3 2016), Anda dapat memilih berbagai komit langsung pada cabang yatim (kepala kosong): lihat " Bagaimana membuat cabang yang ada menjadi yatim di git ".
Jawaban asli (Januari 2010)
A rebase --ontoakan lebih baik, di mana Anda memutar ulang rentang komit yang diberikan di atas cabang integrasi Anda, seperti dijelaskan Charles Bailey di sini .
(juga, cari "Inilah cara Anda mentransplantasikan cabang topik berdasarkan satu cabang ke cabang lain" di halaman manual git rebase , untuk melihat contoh praktis dari git rebase --onto)
Jika cabang Anda saat ini adalah integrasi:
# Checkout a new temporary branch at the current location
git checkout -b tmp
# Move the integration branch to the head of the new patchset
git branch -f integration last_SHA-1_of_working_branch_range
# Rebase the patchset onto tmp, the old location of integration
git rebase --onto tmp first_SHA-1_of_working_branch_range~1 integration
Itu akan memutar ulang semuanya antara:
- setelah induk dari
first_SHA-1_of_working_branch_range(karenanya ~1): komit pertama yang ingin Anda putar ulang
- hingga "
integration" (yang menunjuk ke komit terakhir yang ingin Anda putar ulang, dari workingcabang)
ke " tmp" (yang menunjuk ke tempat integrationmenunjuk sebelumnya)
Jika ada konflik ketika salah satu dari komitmen itu diputar ulang:
- pecahkan dan jalankan "
git rebase --continue".
- atau lewati tambalan ini, dan jalankan "
git rebase --skip"
- atau membatalkan semua hal dengan "
git rebase --abort" (dan meletakkan kembali integrationcabang di tmpcabang)
Setelah itu rebase --onto, integrationakan kembali pada komit terakhir dari cabang integrasi (yaitu tmpcabang + "semua komitmen yang diputar ulang)
Dengan memetik ceri atau rebase --onto, jangan lupa itu memiliki konsekuensi pada penggabungan berikutnya, seperti dijelaskan di sini .
cherry-pickSolusi " " murni dibahas di sini , dan akan melibatkan sesuatu seperti:
Jika Anda ingin menggunakan pendekatan tambalan maka "git format-patch | git am" dan "git cherry" adalah pilihan Anda.
Saat ini, git cherry-pickhanya menerima satu komit, tetapi jika Anda ingin memilih kisaran Bmelalui Dyang akan B^..Ddi git lingo, sehingga
git rev-list --reverse --topo-order B^..D | while read rev
do
git cherry-pick $rev || break
done
Tapi bagaimanapun, ketika Anda perlu "memutar ulang" serangkaian commit, kata "replay" akan mendorong Anda untuk menggunakan fitur " rebase" Git.