GIT menggabungkan master menjadi cabang

49

Saya telah mengembangkan fitur baru di cabang baru, dan di samping telah melakukan beberapa perubahan pada cabang utama saya.

Apakah mungkin untuk menggabungkan cabang master ke cabang baru saya agar tetap mutakhir sehingga saya tidak akan memiliki terlalu banyak menggabungkan konflik setelah fitur baru selesai?

mnml
sumber
Sudahkah Anda mencoba git-merge? Bantu di sini .
karatedog

Jawaban:

56

Anda dapat git merge masteratau git rebase master, dalam hal ini saya lebih suka git rebase .

Karena git rebasemembuatnya seolah-olah perubahan pada cabang fitur dibuat di atas perubahan pada cabang master, yang membuat grafik versi lebih sederhana.

Rebase

Mengambil contoh dari manual git rebase , git rebase masterdi cabang feature:

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

Namun, git rebasehanya cocok ketika cabang belum didistribusikan, atau akan ada kebingungan dan kerja ekstra di hilir, karena yang lama melakukan A, B, C sekarang digantikan oleh komit baru A ', B', C ', ditambah F dan G yang tidak ada di sana sebelumnya.

Hasil sebenarnya setelah git rebase masterdi cabang featureadalah ini:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

Komit A, B, C menggantung setelah rebase, tetapi dapat dicapai melalui git reflog feature.

Menggabungkan

Jika seseorang telah menarik cabang Anda, atau Anda mendorongnya ke suatu tempat, Anda harus menggabungkannya, untuk menghindari kebingungan dan kerja ekstra di ujung yang lain. Lihat Memulihkan dari rebase hulu .

Ini adalah hasil dari git merge masterdi cabang feature:

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

Atau, jika Anda git merge featuredi cabang master, akan terlihat seperti ini:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master
Christoffer Hammarström
sumber
Anda harus menjelaskan mengapa Anda lebih suka rebase dan apa perbedaannya. Rebase menciptakan sejarah linier - ini mungkin tidak cocok dengan pertanyaan ini.
Andreas Rehm
Ok jika saya mengerti dengan baik: Saya harus checkout cabang master jika fitur baru belum selesai dan rebase jika sudah selesai?
mnml
Tidak, dengan cabang fitur dicentang, lakukan git rebase master, dan itu akan "rebase" perubahan di cabang fitur sehingga mereka "berdasarkan" pada perubahan di cabang master. Jika perubahan dalam cabang utama bertentangan dengan perubahan di cabang fitur, git akan meminta Anda untuk menyelesaikannya dan melanjutkan, melewati, atau membatalkan. Jika Anda merasa tidak yakin, Anda dapat checkout cabang uji untuk mencobanya git checkout -b test-feature feature( dengan asumsi cabang fitur Anda bernama "fitur").
Christoffer Hammarström
2
Apa maksudmu "tidak bisa melihat cabang saya lagi"? Lagi pula, git rebasehanya boleh digunakan jika cabang belum didistribusikan, yang saya anggap kasusnya karena Anda mengatakan itu adalah cabang baru, maaf tentang itu. Lihat Memulihkan dari rebase hulu di dokumen yang saya tautkan. Anda harus menggunakannya git mergesebagai gantinya. Dan Anda dapat menggunakan git refloguntuk menemukan kepala cabang fitur Anda sebelumnya jika Anda ingin mendapatkannya kembali.
Christoffer Hammarström
1
Saya belum pernah melihat penjelasan yang lebih jelas tentang perbedaan antara merger dan rebase. Terima kasih.
Paulo Pedroso