Jawaban utama menjelaskan bagaimana menerapkan perubahan dari komit tertentu ke cabang saat ini. Jika itu yang Anda maksud dengan "cara menggabungkan", maka gunakan saja cherry-pick seperti yang disarankan.
Tetapi jika Anda benar-benar menginginkan penggabungan , yaitu Anda ingin komit baru dengan dua orang tua - komit yang ada di cabang saat ini, dan komit yang ingin Anda terapkan perubahannya - maka pemilihan ceri tidak akan mencapai itu.
Memiliki riwayat gabungan yang sebenarnya mungkin diinginkan, misalnya, jika proses build Anda memanfaatkan git keturunan untuk secara otomatis mengatur string versi berdasarkan tag terbaru (menggunakan git describe
).
Alih-alih memilih ceri, Anda dapat melakukan yang sebenarnya git merge --no-commit
, dan kemudian secara manual menyesuaikan indeks untuk menghapus perubahan yang tidak Anda inginkan.
Misalkan Anda berada di cabang A
dan Anda ingin menggabungkan komit di ujung cabang B
:
git checkout A
git merge --no-commit B
Sekarang Anda siap membuat komit dengan dua orang tua, tip saat ini adalah dari A
dan B
. Namun Anda mungkin memiliki lebih banyak perubahan yang diterapkan daripada yang Anda inginkan, termasuk perubahan dari komit sebelumnya pada cabang B. Anda harus membatalkan perubahan yang tidak diinginkan ini, lalu komit.
(Mungkin ada cara mudah untuk mengatur status direktori kerja dan indeks kembali ke keadaan sebelum penggabungan, sehingga Anda memiliki papan tulis yang bersih untuk memilih komit yang Anda inginkan di tempat pertama. Tapi Saya tidak tahu cara mencapai yang bersih, git checkout HEAD
dan git reset HEAD
keduanya akan menghapus status gabungan, mengalahkan tujuan metode ini.)
Jadi secara manual batalkan perubahan yang tidak diinginkan. Misalnya, Anda bisa
git revert --no-commit 012ea56
untuk setiap komit yang tidak diinginkan 012ea56
.
Setelah selesai menyesuaikan hal-hal, buat komit Anda:
git commit -m "Merge in commit 823749a from B which tweaked the timeout code"
Sekarang Anda hanya memiliki perubahan yang Anda inginkan, dan pohon keturunan menunjukkan bahwa Anda secara teknis bergabung dari B.