Dalam git, cawangan merujuk kepada dipisahkan daripada baris utama untuk melaksanakan operasi lain Ia tidak menjejaskan talian utama, dan baris utama boleh terus melakukan kerjanya keperluan; apabila cawangan selesai Ia boleh digabungkan ke dalam baris utama, dan cawangan boleh dipadamkan selepas tugas selesai.
Persekitaran pengendalian tutorial ini: sistem Windows 7, versi Git 2.30.0, komputer Dell G3.
Apakah cawangan git
Seperti namanya, cawangan dipisahkan daripada baris utama untuk melakukan operasi tambahan tanpa menjejaskan talian utama. Anda boleh terus melakukan kerjanya bukankah ia sedikit seperti benang Setelah cawangan akhir selesai, ia digabungkan ke dalam baris utama dan tugas cawangan selesai dan boleh dipadamkan. Bukankah ini sangat mudah? Barisan utama terus melakukan tugasnya, dan cawangan digunakan untuk menyelesaikan keperluan sementara.
Fungsi cawangan Git sangat berkuasa Ia tidak perlu menyalin semua data Ia hanya perlu mencipta semula penuding cawangan yang menunjukkan tempat anda perlu mula mencipta objek penyerahan cawangan (komit), dan. kemudian ubah suainya dan serahkannya , maka penunjuk cawangan baharu akan menunjuk ke objek komit terbaharu anda, dan penunjuk cawangan asal akan menghala ke lokasi pembangunan asal anda Apabila anda membangunkan cawangan mana, HEAD menunjuk ke komit objek komit terkini cawangan itu. Tidak mengapa jika anda tidak memahaminya dengan jelas. Terdapat konsep sedemikian dahulu, dan anda akan memahaminya secara beransur-ansur.
Penciptaan dan penggabungan cawangan
Kami boleh menggunakan perintah git branch untuk melihat berapa banyak cawangan yang ada di gudang git kami, dan kami kini bekerja Cawangan mana kita berada, yang bertanda * di hadapannya ialah cawangan yang sedang kita jalani. Kita boleh mencipta cawangan dengan mengarahkan nama cawangan git, dan penuding cawangan ini menghala ke objek komit terkini, yang menghala ke objek yang sama seperti HEAD. Kami boleh bertukar ke cawangan destinasi melalui nama git checkout arahan kami adalah master. Apabila mencipta dan menukar cawangan, ia sebenarnya hanyalah perkara mudah untuk mencipta penuding untuk mencari penuding, dan kemudian mencari objek komit yang ditunjukkan oleh penuding yang ditemui, dan kemudian memulihkan ruang kerja ke petikan fail yang ditunjuk oleh objek komit untuk kita bekerja. Apabila diserahkan sekali, penuding akan menunjuk ke objek yang diserahkan terkini sekali lagi, yang sangat mudah.
Apabila kita mencipta teset cawangan, hanya terdapat satu cawangan induk, seperti yang ditunjukkan dalam Rajah 1. Semua pembangunan kita adalah pada cawangan ini, dan HEAD menunjuk ke Objek komit terbaharu c3, c3 mempunyai dua komit sebelumnya c1 dan c2 Pada masa ini, kami mencipta cawangan ujian melalui ujian cawangan git, seperti yang ditunjukkan dalam Rajah 2. Pada masa ini, HEAD masih menunjuk kepada komit terbaru c3. cawangan induk. Apabila git checkout Selepas ujian beralih ke cawangan ujian, HEAD menunjuk ke komit c3 terbaharu cawangan ujian Pada masa ini, sebenarnya, semua fail dalam .git menunjuk ke c3 yang sama.
Pada masa ini, apabila kami telah membangunkan beberapa kali pada cawangan ujian dan menyerahkan versi c4 dan c5, maka kedua-dua ujian dan HEAD menunjuk kepada versi terkini ujian cawangan Hantar c5, seperti yang ditunjukkan dalam Rajah 3. Master tidak berubah pada masa ini dan masih menunjuk ke c3 Jika cawangan ujian digabungkan ke dalam cawangan induk pada masa ini, maka git tidak perlu melakukan apa-apa hanya perlu mengalihkan master ke arah c5 , proses ini dipanggil Fast-forward. Jika tugas ujian selesai pada masa ini, kami boleh memadamkannya melalui ujian git branch -d dan meneruskan pembangunan pada induk cawangan utama. Jika ini berlaku, maka cabang ujian akan dibina dengan sia-sia.
Jadi jika terdapat perkembangan lain pada cawangan induk pada masa ini dan dua versi c6 dan c7 diserahkan, maka penunjuk induk dan HEAD pada masa ini menunjuk ke c7 , seperti yang ditunjukkan dalam Rajah 4, anda boleh melihat cawangan yang dibangunkan, kemudian HEAD menunjuk ke komit pada cawangan mana Jika anda menggabungkan kedua-dua cawangan pada masa ini, ia adalah seperti berikut.
Seperti yang ditunjukkan dalam Rajah 5, kita mula-mula beralih ke cawangan induk, dan kemudian menggabungkan cawangan ujian ke cawangan induk melalui ujian gabungan git Pada masa ini, git tidak lagi hanya menggerakkan penunjuk, kerana terdapat pembangunan kedua-dua belah pihak, jadi git mesti Yang terbaru melakukan c5 dan c7 daripada dua cawangan, serta nenek moyang yang sama melakukan objek c3 daripada dua cawangan, melakukan gabungan tiga pihak yang mudah, menjana gambar fail baharu dan merekodkannya dengan yang baharu commit object c8 Anda tidak perlu memberi terlalu banyak perhatian kepada proses gabungan ini Jika konflik berlaku, iaitu, dua cawangan telah mengubah suai fail yang sama, maka git akan menghentikan operasi gabungan dan membiarkan anda mengendalikan konflik, kemudian. serahkan (c8), dan kemudian cantumkan. Pada masa ini, kedua-dua induk dan HEAD menunjuk ke c8, tetapi ujian belum dialihkan Pada masa ini, anda boleh terus membangunkan pada ujian dan kemudian menggabungkannya ke dalam induk Jika ujian tidak lagi bernilai, anda boleh memadamkannya .
Cawangan tempatan, cawangan pengesanan dan cawangan terpencil
Terdapat tiga konsep di sini Cawangan tempatan ialah cawangan yang boleh kita lihat melalui cawangan git Iaitu, kita boleh menggunakan semua cawangan yang dimiliki oleh gudang git kita sendiri. Cawangan jauh adalah indeks cawangan gudang jauh Ia sebenarnya adalah cawangan tempatan, tetapi kita tidak boleh memindahkannya. Kita mesti berinteraksi dengan pelayan pusat dan memindahkannya berdasarkan kod yang dikemas kini oleh pelayan cawangan terpencil ialah kami kali terakhir berinteraksi dengannya Versi terkini yang diperolehi oleh kemas kini interaktif pelayan pusat juga merupakan penunjuk. Cawangan penjejakan adalah lebih sukar untuk difahami Ia juga merupakan cawangan tempatan, tetapi ia sepadan dengan cawangan terpencil Jika salah satu cawangan tempatan kami sepadan dengan cawangan terpencil tertentu, maka ia adalah cawangan penjejakan asal kami ialah cawangan penjejakan, yang sepadan dengan asal/induk cawangan terpencil, di mana asal ialah nama gudang jauh Apabila kami melakukan kemas kini (ambil, tarik) atau tolak (tolak) dalam cawangan induk, tanpa menyatakan cawangan , lalai adalah asal/ Cawangan induk dikemas kini atau diserahkan kepada cawangan asal/mster.
Adalah mudah untuk melihat dari Rajah 7 dan Rajah 8 bahawa ia sangat serupa dengan penciptaan cawangan tempatan kami, kecuali remote asal/induk cawangan hanya disambungkan ke pelayan Dan kemas kini kod pelayan kepada setempat sebelum bergerak, seperti yang ditunjukkan dalam Rajah 9:
Terdapat dua arahan untuk mengemas kini alat kawalan jauh kod ke setempat, ambil dan tarik, ambil adalah ke Kod jauh dikemas kini secara setempat, tetapi operasi cantuman tidak akan dilakukan Kami perlu menyemaknya sendiri, menyelesaikan konflik, dsb., dan kemudian melaksanakan gabungan sendiri untuk menggabungkan yang dikemas kini kod ke dalam cawangan kami sendiri, tetapi tarik menggabungkan kedua-dua operasi ini Dalam satu langkah, kemas kini terus kod pelayan dan gabungkannya ke dalam cawangan tempatan yang ditetapkan Sudah tentu, jika anda menghadapi konflik, anda mesti menyelesaikannya sendiri. Oleh itu, kami biasanya menggunakan fetch untuk melaksanakan kemas kini Walaupun ia agak menyusahkan, ia tidak terdedah kepada masalah.
Tolak kod tempatan ke gudang jauh, iaitu pelayan pusat Secara amnya, data yang kami tolak ialah git push origin master:master Di sini kami menentukan nama gudang jauh, nama cawangan tempatan dan cawangan jauh , iaitu, tempatan kami Data cawangan induk ditolak ke cawangan induk asal gudang terpencil. Jika cawangan induk tempatan ialah cawangan penjejakan, ia akan mencari cawangan yang sepadan dalam gudang jauh untuk menolak data melainkan dinyatakan. Atau kami terus melakukan operasi git push origin dan hanya menentukan nama gudang jauh Kemudian git akan menolak data berdasarkan cawangan di mana kami berada pada masa ini dan cawangan gudang terpencil yang sepadan ialah cawangan kami sekarang pada mestilah cawangan pengesanan. Sudah tentu, jika ia adalah git push origin:master, nama cawangan tempatan di sini adalah kosong Operasi ini adalah untuk menolak cawangan kosong ke cawangan induk gudang terpencil, dan hasilnya adalah untuk memadamkan cawangan induk.
Memandangkan cawangan penjejakan sangat mudah digunakan, bagaimanakah cara kita membuat cawangan pengesanan cawangan, lalai adalah jauh Nama cawangan gudang adalah sama: git checkout --track origin/test, jadi kami mencipta cawangan penjejakan bernama test Jika kami menamakan semula cawangan penjejakan: git checkout -b name origin/test , kami mencipta nama cawangan penjejakan, yang sepadan dengan cawangan ujian repositori jauh. Kaedah kedua ialah cawangan tempatan sudah wujud, dan anda mahu ia sepadan dengan cawangan terpencil dan menjadi cawangan penjejakan Terdapat juga dua arahan yang boleh anda gunakan, git branch --set-upstream test origin/test atau git branch -f - -track test origin/test Di sini kami membenarkan cawangan ujian tempatan sedia ada kami menjejaki cawangan ujian jauh.
pengurusan cawangan git
git sangat mudah dan pantas untuk mencipta cawangan dan menggabungkan cawangan, jadi kami boleh menggunakan cawangan secara gila semasa proses pembangunan kami, dan salah satu permainan teras git ialah penggunaan cawangan sangat disyorkan, tetapi bolehkah kami menggunakan Ia tidak bertanggungjawab? Bagi cawangan, bagaimana kita menguruskan apabila kita membuat cawangan yang terlalu banyak tetapi hanya jumlah yang tepat jika terlalu banyak cawangan yang diwujudkan, ia akan menyusahkan untuk diuruskan strategi pengurusan, git-flow, dan juga mengesyorkan strategi pengurusan cawangan Baca artikel ini untuk mengetahui tentang strategi ini: http://nvie.com/posts/a-successful-git-branching-model/ untuk menggunakan git anda. lebih selesa.
Pembelajaran yang disyorkan: "Tutorial Git"
Atas ialah kandungan terperinci Apakah maksud cawangan dalam git?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!