Baru-baru ini, saya telah diminta untuk cherry-pick
berkomitmen.
Jadi, apa artinya memetik komitmen di git? Bagaimana Anda melakukannya?
git
cherry-pick
git-cherry-pick
Rahul
sumber
sumber
Jawaban:
Memetik ceri di Git berarti memilih komit dari satu cabang dan menerapkannya pada yang lain.
Ini berbeda dengan cara-cara lain seperti
merge
danrebase
yang biasanya menerapkan banyak commit ke cabang lain.Pastikan Anda berada di cabang tempat Anda ingin menerapkan komit.
Jalankan yang berikut ini:
NB:
Jika Anda memilih dari cabang publik, Anda harus mempertimbangkan untuk menggunakan
Ini akan menghasilkan pesan komit standar. Dengan cara ini, Anda (dan rekan kerja Anda) masih dapat melacak asal komit dan dapat menghindari penggabungan konflik di masa mendatang.
Jika Anda memiliki catatan yang terlampir pada komit, mereka tidak mengikuti cherry-pick. Untuk membawanya juga, Anda harus menggunakan:
Tautan tambahan:
sumber
git cherry-pick -x <commit-hash>
. Ini akan menghasilkan pesan komit standar. Dengan cara ini, Anda (dan rekan kerja Anda) masih dapat melacak asal komit dan dapat menghindari penggabungan konflik di masa mendatang.git notes copy <from> <to>
untuk membawanya juga."cherry-pick commit applies the changes introduced by the named commit on the current branch"
Kebanyakan ppl cenderung menganggap komit sebagai perubahan (seperti svn adalah iirc), tetapi tidak, masing-masing komit mengacu pada pohon kerja yang lengkap. Meskipun ini tidak membuat perbedaan dalam kasus ini, ini dapat membantu dalam memahami mengapa git bekerja seperti itu.Kutipan ini diambil dari; Kontrol Versi dengan Git (Buku yang benar-benar hebat, saya mendorong Anda untuk membelinya jika Anda tertarik pada git)
Sunting: Karena jawaban ini masih terkesan, saya ingin menambahkan tutorial video aksi yang sangat bagus tentangnya:
Youtube: Pengantar Git-pick ceri
sebelum:
setelah:
sumber
Memetik ceri di Git dirancang untuk menerapkan beberapa komit dari satu cabang ke cabang lainnya. Ini dapat dilakukan jika Anda mis. membuat kesalahan dan melakukan perubahan menjadi cabang yang salah, tetapi tidak ingin menggabungkan seluruh cabang. Anda bisa saja misalnya. kembalikan komit dan ambil-ceri di cabang lain.
Untuk menggunakannya, Anda hanya perlu
git cherry-pick hash
, di manahash
hash komit dari cabang lain.Untuk prosedur lengkap, lihat: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
sumber
Contoh singkat situasi, saat Anda membutuhkan cherry pick
SEKARANG : Anda memperbaiki sesuatu di rilis1 . Tentu saja Anda perlu perbaikan ini juga di master . Dan itu adalah kasus penggunaan khas untuk memetik ceri. Jadi cherry pick dalam skenario ini berarti bahwa Anda mengambil komit dari cabang release1 dan memasukkannya ke cabang master .
sumber
cherry-pick adalah fitur Git. Jika seseorang ingin melakukan komitmen tertentu dalam satu cabang ke cabang target, maka cherry-pick digunakan.
langkah git-pick ceri adalah seperti di bawah ini.
Di sini, komit id adalah id aktivitas cabang lain.Eg.
Kunjungi https://git-scm.com/docs/git-cherry-pick
sumber
Saya menyiapkan ilustrasi selangkah demi selangkah tentang apa yang dilakukan oleh cherry-pick - dan animasi dari ilustrasi ini (mendekati akhir).
(kita akan melakukan ceri-memilih dari komit
L
dari cabangfeature
):git cherry-pick feature~2
(
feature~2
adalah 2 nd melakukan sebelumfeature
, yaitu komitL
):git cherry-pick feature~2
):Animasi yang sama:
catatan:
Komit
L'
adalah dari sudut pandang pengguna (komit = snapshot) salinan persis komitL
.Secara teknis (internal), ini adalah komit baru, berbeda (karena mis.
L
Berisi pointer keK
(sebagai induknya), sementaraL'
berisi pointer keE
).sumber
Anda dapat berpikir jika ceri memilih mirip dengan rebase, atau lebih tepatnya itu dikelola seperti rebase. Maksud saya, ini membutuhkan komit yang sudah ada dan regenerasi mengambil, sebagai titik awal, kepala cabang Anda saat ini.
A
rebase
mengambil komit yang memiliki induk X dan meregenerasi komit seolah-olah itu benar-benar memiliki orangtua Y, dan inilah tepatnya yangcherry-pick
dilakukan oleh orangtua .Cherry pick lebih banyak tentang bagaimana Anda memilih komit. Dengan
pull
(rebase), git secara implisit meregenerasi komit lokal Anda di atas apa yang ditarik ke cabang Anda, tetapi dengancherry-pick
Anda secara eksplisit memilih beberapa commit, dan secara implisit memperbanyaknya, di atas cabang Anda saat ini.Jadi cara Anda melakukannya berbeda, tetapi di bawah tenda mereka adalah operasi yang sangat mirip - regenerasi dari komitmen.
sumber
cherry-pick
berperilaku seperti itu ketika cabang target kemudian digabungkan kembali ke cabang sumber. Terima kasih Pak.Ini seperti Salin (dari suatu tempat) dan Tempel (ke suatu tempat), tetapi untuk komitmen tertentu.
Jika Anda ingin melakukan perbaikan terbaru, misalnya, maka Anda dapat menggunakan
cherry-pick
fitur ini.Apakah Anda
cherry-pick
di cabang pengembangan, danmerge
yang berkomitmen untuk cabang rilis. Demikian juga, lakukancherry-pick
dari cabang rilis ke master. Voilasumber
Ketika Anda bekerja dengan tim pengembang pada suatu proyek, mengelola perubahan antara sejumlah cabang git bisa menjadi tugas yang kompleks. Terkadang Anda tidak ingin menggabungkan seluruh cabang menjadi yang lain, dan hanya perlu memilih satu atau dua komitmen tertentu. Proses ini disebut 'memetik ceri'.
Temukan artikel hebat tentang memetik ceri, periksa untuk detail lebih dalam: https://www.previousnext.com.au/blog/intro-cherry-picking-git
sumber
Jika Anda ingin menggabungkan tanpa melakukan id Anda dapat menggunakan perintah ini
Perintah di atas akan menggabungkan tiga commit terakhir dari 1 menjadi 3
Jika Anda ingin melakukan ini untuk komit tunggal cukup hapus opsi terakhir
Dengan cara ini Anda akan menggabungkan komit ke-3 dari ujung master.
sumber
Ini akan menerapkan komit tertentu ke cabang Anda saat ini.
Ini berarti :
Mis: Pertimbangkan komit A
komit B
Jika Anda memilih cheri komit B di cabang lain, Anda akan berakhir dengan:
karena commit B mengandung newFileB dan main , tetapi tidak ada newFileA , menghasilkan bug, jadi gunakan dengan hati-hati.
sumber
Kutipan dari dokumen resmi:
Baca lebih banyak...
sumber