Artikel ini akan mengajar anda tentang cawangan Git dan memperkenalkan arahan Git Merge untuk menggunakan cawangan saya harap ia akan membantu anda!
Dalam Git, cantum ialah cara untuk menyatukan kembali sejarah komit bercabang. Perintah git merge
digunakan untuk menyepadukan cawangan yang anda buat sebelum ini menggunakan perintah git branch
dan kandungan yang dibangunkan secara bebas pada cawangan ini ke dalam satu cawangan.
Sila ambil perhatian bahawa semua arahan di bawah akan menggabungkan cawangan lain ke dalam cawangan berfungsi semasa. Kandungan cawangan kerja semasa akan dikemas kini kerana operasi gabungan, tetapi cawangan sasaran tidak akan terjejas sama sekali. Sekali lagi, ini bermakna git merge
biasanya digunakan bersama dengan beberapa arahan git lain, termasuk git checkout
untuk memilih cawangan kerja semasa dan git branch -d
untuk memadamkan cawangan terbengkalai yang telah digabungkan.
git merge
Menggabungkan berbilang jujukan komit ke dalam sejarah komit bersatu. Dalam senario penggunaan yang paling biasa, git merge
digunakan untuk menggabungkan dua cabang. Dalam baki dokumen ini, kami akan menumpukan pada senario gabungan ini. Dalam senario ini, git merge
menerima dua penunjuk komit, biasanya komit teratas kedua-dua cawangan, dan kemudian menjejak ke hadapan ke komit biasa terbaharu bagi kedua-dua cawangan. Setelah komit biasa ini ditemui, Git mencipta "komit gabungan" baharu yang menggabungkan jujukan komit masing-masing pada kedua-dua cawangan.
Contohnya, kami mempunyai cawangan ciri yang diperoleh daripada cawangan main
, dan kini kami mahu menggabungkan cawangan ciri ini kembali ke cawangan main
.
Melaksanakan perintah gabungan akan menggabungkan cawangan yang ditentukan ke dalam cawangan kerja semasa Kami menganggap bahawa cawangan kerja semasa ialah main
. Git menentukan algoritmanya sendiri untuk menggabungkan komit berdasarkan dua cabang (dibincangkan secara terperinci di bawah).
Komit gabungan berbeza daripada komit biasa, kerana komit gabungan akan mempunyai dua komit induk. Apabila anda membuat komit gabungan, Git akan cuba menggabungkan dua sejarah komit berasingan secara automatik menjadi satu. Walau bagaimanapun, apabila Git mendapati bahawa sekeping data tertentu mengandungi perubahan dalam sejarah penyerahan kedua-dua belah pihak, ia tidak akan dapat menggabungkannya secara automatik. Keadaan ini dipanggil konflik versi Pada masa ini, Git memerlukan campur tangan manual untuk meneruskan penggabungan.
Sebelum operasi penggabungan sebenar, beberapa langkah persediaan perlu dijalankan untuk memastikan proses penggabungan dapat berjalan dengan lancar.
Laksanakan perintah git status
untuk menyemak status cawangan semasa dan pastikan penunjuk HEAD
menghala ke cawangan yang betul yang menerima gabungan itu. Jika tidak, laksanakan perintah git checkout
untuk bertukar ke cawangan yang betul. Dalam contoh kami, laksanakan git checkout main
.
Pastikan kedua-dua cawangan yang terlibat dalam operasi gabungan dikemas kini kepada status terkini repositori jauh. Laksanakan git fetch
untuk menarik komit terkini dari gudang jauh. Setelah operasi ambil selesai, untuk memastikan cawangan main
disegerakkan dengan cawangan jauh, arahan git pull
perlu dilaksanakan.
Apabila persediaan yang dinyatakan di atas selesai, penggabungan boleh bermula secara rasmi. Jalankan perintah git merge <branch></branch>
, di mana nama cawangan sasaran yang perlu digabungkan ke dalam cawangan semasa.
Apabila sejarah penyerahan antara cawangan kerja semasa dan cawangan sasaran cantum ialah laluan linear, cantuman ke hadapan pantas boleh dilakukan. Dalam kes ini, tidak perlu benar-benar menggabungkan kedua-dua cawangan Git hanya perlu mengalihkan penunjuk atas cawangan semasa ke bahagian atas cawangan sasaran (iaitu, ke hadapan pantas). Dalam kes ini, gabungan ke hadapan pantas berjaya menggabungkan sejarah komit ke satu tempat Lagipun, komit dalam cawangan sasaran kini disertakan dalam sejarah komit cawangan semasa. Untuk proses penggabungan cawangan ciri ke hadapan pantas ke dalam cawangan main
, sila rujuk rajah di bawah:
Walau bagaimanapun, penggabungan ke hadapan pantas akan berlaku apabila dua cabang bercabang Ia tidak dibenarkan untuk dilaksanakan. Apabila sejarah komit cawangan sasaran berbanding dengan cawangan semasa tidak linear, Git hanya boleh memutuskan cara menggabungkan dua cawangan melalui algoritma gabungan tiga hala. Algoritma gabungan tiga hala memerlukan penggunaan komitmen khusus untuk menyepadukan sejarah komitmen kedua-dua belah pihak. Istilah ini berasal daripada fakta bahawa untuk Git menghasilkan komit gabungan, ia perlu menggunakan tiga komit: komit teratas kedua-dua cawangan dan komit nenek moyang mereka yang sama.
Walaupun sebenarnya terdapat pilihan untuk menggunakan strategi gabungan yang berbeza ini, kebanyakan pembangun lebih suka penggabungan ke hadapan pantas (dengan menggunakan perintah rebasing ), terutamanya untuk pembangunan ciri kecil atau pembetulan pepijat; menggabungkan cawangan fungsi pembangunan jangka panjang, ia lebih cenderung untuk menggunakan penggabungan tiga hala. Dalam senario kedua, komit gabungan yang dihasilkan oleh gabungan akan dikekalkan dalam sejarah komit sebagai tanda gabungan kedua-dua cabang.
Seterusnya kami menggunakan contoh pertama di bawah untuk menunjukkan cara melakukan penggabungan ke hadapan pantas. Perintah berikut mula-mula akan mencipta cawangan baharu, membuat dua komitmen pada cawangan baharu, dan kemudian menggunakan cantum ke hadapan pantas untuk menggabungkan cawangan baharu kembali ke cawangan main
.
# Start a new feature git checkout -b new-feature main # Edit some files git add <file> git commit -m "Start a feature" # Edit some files git add <file> git commit -m "Finish a feature" # Merge in the new-feature branch git checkout main git merge new-feature git branch -d new-feature
Aliran kerja dalam contoh ini biasanya digunakan untuk pembangunan fungsi jangka pendek Proses pembangunan ini lebih dianggap sebagai proses pembangunan yang agak bebas, dan oleh itu memerlukan penyelarasan dan pengurusan jangka panjang cawangan pembangunan.
Juga ambil perhatian bahawa dalam contoh ini Git tidak akan mengeluarkan amaran untuk perintah git branch -d
kerana kandungan ciri baharu telah digabungkan ke dalam cawangan utama.
Dalam sesetengah kes, walaupun sejarah komit cawangan sasaran adalah linear berbanding cawangan semasa dan boleh digabungkan ke hadapan pantas, anda masih mahu mempunyai komit gabungan untuk menandakan bahawa gabungan telah berlaku pada masa ini commit, maka Anda boleh menggunakan pilihan git merge
apabila melaksanakan perintah --no-ff
.
git merge --no-ff <branch>
Arahan di atas akan menggabungkan cawangan yang ditentukan ke dalam cawangan semasa, tetapi akan sentiasa menjana komit gabungan (walaupun operasi gabungan ini boleh dimajukan pantas). Perintah ini berguna apabila anda perlu menandakan peristiwa gabungan dalam sejarah komit repositori.
Contoh seterusnya adalah serupa dengan yang di atas, tetapi kerana cawangan main
itu sendiri juga berubah semasa pembangunan hadapan cawangan ciri, jadi apabila menggabungkan gabungan tiga hala diperlukan. Senario ini agak biasa apabila menjalankan pembangunan ciri berskala besar atau apabila berbilang pembangun membangun pada masa yang sama.
Start a new feature git checkout -b new-feature main # Edit some files git add <file> git commit -m "Start a feature" # Edit some files git add <file> git commit -m "Finish a feature" # Develop the main branch git checkout main # Edit some files git add <file> git commit -m "Make some super-stable changes to main" # Merge in the new-feature branch git merge new-feature git branch -d new-feature
Sila ambil perhatian bahawa dalam kes ini, Git tidak boleh melakukan gabungan ke hadapan pantas kerana tiada cara untuk terus mengalihkan penunjuk atas main
ke cawangan new-feature
.
Dalam kebanyakan senario kerja sebenar, new-feature
sepatutnya menjadi ciri yang besar, dan proses pembangunan berlangsung lama, jadi tidak dapat dielakkan bahawa akan ada penyerahan baharu pada cawangan main
pada masa yang sama masa. Jika saiz cawangan ciri anda adalah sekecil contoh di atas, anda boleh menggunakan rebase untuk meletakkan semula cawangan new-feature
ke cawangan main
, dan kemudian lakukan gabungan ke hadapan pantas. Ini juga akan mengelakkan daripada mewujudkan terlalu banyak redundansi dalam sejarah komitmen projek.
Jika dua cabang yang hendak digabungkan telah mengubah suai bahagian fail yang sama, Git tidak dapat menentukan versi kandungan yang harus digunakan. Apabila ini berlaku, proses cantuman dihentikan sebelum komit cantuman dibuat untuk memberi pengguna peluang untuk membetulkan konflik ini secara manual.
Perkara yang menarik tentang proses penggabungan Git ialah ia menggunakan aliran kerja edit/peringkat/komit yang terkenal untuk menyelesaikan konflik. Apabila konflik gabungan ditemui, melaksanakan perintah git status
akan menyenaraikan fail yang mengandungi konflik dan perlu diselesaikan secara manual. Sebagai contoh, apabila kedua-dua cawangan telah mengubah suai bahagian yang sama pada fail hello.py
, anda akan melihat maklumat yang serupa dengan yang berikut:
On branch main Unmerged paths: (use "git add/rm ..." as appropriate to mark resolution) both modified: hello.py
Apabila Git berada dalam Jika konflik ditemui semasa proses penggabungan, ia akan mengedit kandungan yang berkaitan dalam fail yang terjejas dan menambah penanda visual untuk menunjukkan kandungan berbeza bahagian konflik ini. Penanda visual ini ialah: <<<<<<<,========,>>>>>>>. Untuk mencari lokasi tertentu konflik berlaku, mudah untuk mencari penanda visual ini dalam fail.
here is some content not affected by the conflict <<<<<<< main this is conflicted text from main ======= this is conflicted text from feature branch >>>>>>> feature branch;
Secara umumnya, kandungan sebelum tanda ====== berasal dari cawangan yang menerima gabungan, dan kandungan selepas ia datang dari cawangan yang akan digabungkan.
Setelah anda menjumpai bahagian yang bercanggah, anda boleh membetulkan konflik tersebut mengikut keperluan. Apabila anda telah selesai membetulkan konflik dan bersedia untuk meneruskan penggabungan, anda hanya perlu melaksanakan perintah git add
untuk menambah fail dengan konflik yang telah diselesaikan ke kawasan pementasan dan memberitahu Git bahawa konflik ini telah diselesaikan. Selepas ini, laksanakan git commit
sama seperti penyerahan kod biasa untuk melengkapkan komit gabungan. Proses ini betul-betul sama seperti menyerahkan kod dalam keadaan biasa, yang bermaksud bahawa pengendalian konflik adalah perkara penting untuk pembangun biasa.
Juga ambil perhatian bahawa konflik cantuman hanya boleh berlaku semasa cantuman tiga hala dan tidak akan berlaku semasa cantuman maju pantas.
Artikel ini ialah gambaran keseluruhan perintah git merge
. Dalam proses menggunakan Git, penggabungan adalah operasi yang sangat penting. Artikel ini membincangkan mekanik di sebalik operasi cantuman dan perbezaan antara cantuman maju pantas dan cantuman tiga hala. Perkara utama yang perlu diingat oleh pembaca adalah seperti berikut:
Proses gabungan Git adalah untuk menggabungkan urutan komit yang berbeza ke dalam sejarah komit bersatu
Git Terdapat dua kaedah utama dalam proses cantuman: cantuman ke hadapan pantas dan cantuman tiga hala
Melainkan terdapat konflik dalam dua jujukan komit, Git biasanya boleh menggabungkan secara automatik komited
Pembelajaran yang disyorkan: "Tutorial Git"
Atas ialah kandungan terperinci Pembelajaran Git: memahami arahan git merge. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!