Gabungkan komitmen tertentu

374

Saya membuat cabang baru bernama newbranchdari mastercabang di git. Sekarang saya telah melakukan beberapa pekerjaan dan ingin bergabung newbranchuntuk master; Namun, saya telah membuat beberapa perubahan tambahan newbranchdan saya ingin menggabungkan newbranchkomitmen keempat dari yang terakhir master.

Saya menggunakan cherry-picktetapi menunjukkan pesan untuk menggunakan opsi yang tepat:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

Bisakah saya menggunakan git mergeuntuk melakukannya?

git merge newbranch <commitid>
Dau
sumber

Jawaban:

594

Tentu, berada di mastercabang yang perlu Anda lakukan adalah:

git merge <commit-id>

di mana commit-idhash dari commit terakhir dari newbranchyang ingin Anda dapatkan di mastercabang Anda .

Anda dapat mengetahui lebih lanjut tentang perintah git dengan melakukan git help <command>. Kalau begitu itu git help merge. Dan dokumen mengatakan bahwa argumen terakhir untuk mergeperintah adalah <commit>..., sehingga Anda dapat memberikan referensi ke komit atau bahkan beberapa komit. Padahal, saya sendiri tidak pernah melakukan yang terakhir.

KL-7
sumber
30
tidak hanya satu komit tetapi semua komit sebelumnyacommit-id
Dau
53
Ya, itu akan menggabungkan semua komit dari newbranchsejak zaman sejarah menyimpang dari masterhingga commit-idke mastercabang. Anda dapat memikirkan untuk git merge <commit-id>menggabungkan beberapa cabang tanpa nama yang berakhir dengan commit-idcabang Anda saat ini.
KL-7
2
Bisakah saya menggabungkan antara dua cabang lokal selain master, menggunakan komit id?
skt
1
@skt, Anda bisa, cukup berada di cabang lokal yang ingin Anda gabungkan sebelum menggunakan git merge. yaitu mengatakan Anda ingin menggabungkan commit 18a6fac dari cabang b2 ke cabang b1 lakukangit checkout b1; git merge 18a6fac
XioRcaL
1
Sepertinya ini TIDAK berfungsi, Jika saya berada di cabang saya ingin bergabung dan ada beberapa cabang lain dengan komit AB dan C, dan saya bergabung di C itu hanya mendapat perubahan yang dibuat dalam C, bukan A dan B.
ggb667
12

Untuk menjaga percabangan tetap bersih, Anda bisa melakukan ini:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

Dengan cara ini, cabang baru akan berakhir di mana ia digabungkan menjadi master, dan Anda terus bekerja di cabang baru2.

tkruse
sumber
1

Jalankan perintah di bawah ini ke folder cabang saat ini untuk menggabungkan dari ini <commit-id>ke cabang saat ini, --no-commitjangan membuat komit baru secara otomatis

git merge --no-commit <commit-id>

git merge --continue hanya dapat dijalankan setelah penggabungan menghasilkan konflik.

git merge --abort Batalkan proses resolusi konflik saat ini, dan cobalah untuk merekonstruksi negara pra-penggabungan.

Kode Elastis
sumber