The git cherry-pick <commit>perintah memungkinkan Anda untuk mengambil satu komit (dari cabang apa pun) dan, pada dasarnya, rebase di cabang kerja Anda.
Pertanyaan: katakanlah komit Aadalah bercabang dari masterdan Anda melakukan beberapa pekerjaan di atasnya, menciptakan komit anak Bmelalui E. Katakanlah Ehanya memiliki 1 baris yang ditambahkan D. Jika Anda git cherry-pick Eke master, apakah itu berlaku semua perubahan dari Amelalui Eke mastercabang, atau apakah itu hanya berlaku perubahan dari Dke E, yaitu, ia menambahkan hanya itu 1 line untuk master? Jika kasusnya adalah yang pertama, bagaimana saya mencapai yang terakhir? (selain dari menyalin dan menempel secara manual)
chharvey
7
git cherry-pick -n <commit> Jika Anda tidak ingin cherry pick berkomitmen otomatis.
Ben Flynn
6
Jika BranchA belum didorong ke remote maka Anda dapat menyusun ulang komit menggunakan rebasedan kemudian cukup merge. Lebih baik menggunakan mergelebih dari rebasemungkin jika tidak membuat duplikat komit.
git checkout BranchA
git rebase -i HEAD~113
... reorder the commits so the 10 you want are first ...
git checkout BranchB
git merge [the 10th commit]
Cara lain untuk memindahkan karya yang diperkenalkan dari satu cabang ke cabang lainnya adalah dengan memetiknya. Pilih-ceri di Git seperti rebase untuk komit tunggal. Dibutuhkan tambalan yang diperkenalkan di komit dan mencoba untuk menerapkannya kembali di cabang Anda saat ini. Ini berguna jika Anda memiliki sejumlah komit pada cabang topik dan Anda ingin mengintegrasikan hanya satu dari mereka, atau jika Anda hanya memiliki satu komit pada cabang topik dan Anda lebih memilih untuk memilih-ceri daripada menjalankan rebase. Misalnya, Anda memiliki proyek yang terlihat seperti ini:
Jika Anda ingin menarik komit e43a6 ke cabang master Anda, Anda bisa menjalankan
$ git cherry-pick e43a6
Finished one cherry-pick.
[master]: created a0a41a9: "More friendly message when locking the index fails."
3 files changed, 17 insertions(+), 3 deletions(-)
Ini menarik perubahan yang sama yang diperkenalkan pada e43a6, tetapi Anda mendapatkan nilai SHA-1 komit baru, karena tanggal yang diterapkan berbeda. Sekarang riwayat Anda terlihat seperti ini:
Sekarang Anda dapat menghapus cabang topik Anda dan menjatuhkan komit yang tidak ingin Anda tarik.
Jawaban:
The
git cherry-pick <commit>
perintah memungkinkan Anda untuk mengambil satu komit (dari cabang apa pun) dan, pada dasarnya, rebase di cabang kerja Anda.Bab 5 dari buku Pro Git menjelaskannya lebih baik daripada yang saya bisa , lengkap dengan diagram dan semacamnya. ( Bab tentang Rebasing juga bacaan yang baik.)
Terakhir, ada beberapa komentar bagus tentang cherry-picking vs merger vs rebasing dalam pertanyaan SO lainnya .
sumber
A
adalah bercabang darimaster
dan Anda melakukan beberapa pekerjaan di atasnya, menciptakan komit anakB
melaluiE
. KatakanlahE
hanya memiliki 1 baris yang ditambahkanD
. Jika Andagit cherry-pick E
kemaster
, apakah itu berlaku semua perubahan dariA
melaluiE
kemaster
cabang, atau apakah itu hanya berlaku perubahan dariD
keE
, yaitu, ia menambahkan hanya itu 1 line untukmaster
? Jika kasusnya adalah yang pertama, bagaimana saya mencapai yang terakhir? (selain dari menyalin dan menempel secara manual)Jika BranchA belum didorong ke remote maka Anda dapat menyusun ulang komit menggunakan
rebase
dan kemudian cukupmerge
. Lebih baik menggunakanmerge
lebih darirebase
mungkin jika tidak membuat duplikat komit.sumber
SUMBER: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
Cara lain untuk memindahkan karya yang diperkenalkan dari satu cabang ke cabang lainnya adalah dengan memetiknya. Pilih-ceri di Git seperti rebase untuk komit tunggal. Dibutuhkan tambalan yang diperkenalkan di komit dan mencoba untuk menerapkannya kembali di cabang Anda saat ini. Ini berguna jika Anda memiliki sejumlah komit pada cabang topik dan Anda ingin mengintegrasikan hanya satu dari mereka, atau jika Anda hanya memiliki satu komit pada cabang topik dan Anda lebih memilih untuk memilih-ceri daripada menjalankan rebase. Misalnya, Anda memiliki proyek yang terlihat seperti ini:
Jika Anda ingin menarik komit e43a6 ke cabang master Anda, Anda bisa menjalankan
Ini menarik perubahan yang sama yang diperkenalkan pada e43a6, tetapi Anda mendapatkan nilai SHA-1 komit baru, karena tanggal yang diterapkan berbeda. Sekarang riwayat Anda terlihat seperti ini:
Sekarang Anda dapat menghapus cabang topik Anda dan menjatuhkan komit yang tidak ingin Anda tarik.
sumber