Artikel ini dikutip dari buku "Jump Start Git", yang boleh didapati secara percuma kepada ahli Premium SitePoint. Buku -buku fizikal boleh didapati di kedai buku utama di seluruh dunia, dan anda juga boleh memerintahkan mereka di sini. Semoga anda suka dan mendapat manfaat daripadanya!
Dalam Bab 1, saya bercakap tentang ketakutan awal saya untuk mencuba perkara -perkara baru dalam projek saya. Bagaimana jika anda mencuba beberapa ciri bercita -cita tinggi tetapi memecahkan bahagian yang sebelum ini berfungsi? Ciri cawangan Git sempurna menyelesaikan masalah ini.
Ringkasan mata utama
git branch [分支名称]
. Tukar ke cawangan ini untuk menggunakan git checkout [分支名称]
. Memadam cawangan menggunakan git branch -D [分支名称]
, tetapi disyorkan untuk tidak memadam cawangan kecuali perlu. git merge [分支名称]
. Walau bagaimanapun, ini boleh mewujudkan gelung dalam sejarah projek, yang sukar untuk menavigasi dalam pasukan besar. Bab seterusnya akan meneroka kaedah gabungan yang tidak membuat gelung. Apa itu cawangan?
Mewujudkan cawangan baru dalam projek itu pada dasarnya bermakna membuat salinan projek. Anda boleh menggunakan salinan ini untuk mencuba tanpa menjejaskan projek asal. Jadi jika eksperimen gagal, anda boleh menyerahkannya dan kembali ke projek asal - cawangan utama.
Dan, kemudian, jika anda mengubah fikiran anda, anda boleh memulihkan dengan mudah ke keadaan projek sebelum bergabung.
Oleh itu, cawangan dalam Git adalah laluan pembangunan bebas. Anda boleh membuat komitmen baru di cawangan tanpa menjejaskan cawangan lain. Kemudahan penggunaan cawangan adalah salah satu ciri terbaik Git. (Walaupun pilihan kawalan versi lain (seperti CVS) juga mempunyai pilihan cawangan, pengalaman menggabungkan cawangan pada CVS sangat membosankan. Jika anda mempunyai pengalaman menggunakan cawangan dalam sistem kawalan versi lain, yakinlah bahawa menggunakan cawangan di Git adalah sama sekali berbeza. )Dalam git, anda berada di cawangan utama secara lalai. Nama "Master" tidak bermakna ia lebih unggul dalam apa cara sekalipun. Ini hanya pepatah konvensional.
NOTA: Perjanjian cawangan
Walaupun anda bebas menggunakan cawangan yang berbeza sebagai cawangan asas dalam Git, orang biasanya mengharapkan untuk mencari kod terkini untuk projek tertentu di cawangan utama.Anda mungkin berhujah bahawa tiada cawangan diperlukan kerana keupayaan untuk kembali kepada apa -apa komit. Tetapi bayangkan bahawa anda perlu menunjukkan kerja anda kepada penyelia anda sambil membangunkan ciri baru yang bukan sebahagian daripada kerja yang telah anda lakukan. Oleh kerana cawangan digunakan untuk memisahkan idea yang berbeza, ia menjadikan kod dalam repositori mudah difahami. Di samping itu, cawangan membolehkan anda mengekalkan komitmen penting hanya di Cawangan Master atau Master.
Satu lagi penggunaan cawanganialah mereka membolehkan anda mengendalikan pelbagai perkara pada masa yang sama tanpa mengganggu satu sama lain. Katakan anda menyerahkan Ciri 1 untuk semakan, tetapi ia akan mengambil sedikit masa untuk penyelia anda untuk mengkaji semula. Pada masa yang sama, anda perlu mengendalikan Fungsi 2. Dalam kes ini, cawangan itu berguna. Sekiranya anda mengusahakan idea baru anda di cawangan baru, anda boleh beralih ke cawangan anda pada bila -bila masa untuk memulihkan repositori ke keadaan terdahulu, yang tidak mengandungi sebarang kod yang berkaitan dengan idea anda.
Sekarang mari kita mula menggunakan cawangan di Git. Untuk melihat senarai cawangan dan cawangan semasa yang anda gunakan, jalankan arahan berikut:
<code>git branch</code>
Jika anda telah mengklonkan repositori anda atau menubuhkan repositori jauh, anda juga boleh melihat cawangan jauh. Tambah sahaja -a:
<code>git branch -a</code>
Seperti yang ditunjukkan di atas, cawangan merah menunjukkan bahawa ia terletak di repositori jauh. Dalam contoh kita, kita dapat melihat pelbagai cawangan yang wujud di repositori jauh asal.
Buat cawangan
Terdapat beberapa cara untuk membuat cawangan di Git. Untuk membuat cawangan baru dan simpan di cawangan semasa, jalankan arahan berikut:
di sini,
<code>git branch test_branch</code>
, nampaknya cawangan aktif masih merupakan cawangan utama. Untuk menukar cawangan aktif, kita boleh menjalankan perintah checkout (seperti yang ditunjukkan di bawah): test_branch
<code>git branch</code>
<code>git checkout test_branch</code>
anda juga boleh menggabungkan dua arahan di atas untuk membuat dan menyemak cawangan baru dalam satu arahan dengan menambah -b selepas perintah checkout:
<code>git checkout -b new_test_branch</code>
untuk menamakan semula cawangan semasa ke cafb55d
, jalankan arahan berikut: old_commit_branch
<code>git checkout -b old_commit_branch cafb55d</code>
Padam cawangan
Untuk memadam cawangan, jalankan arahan berikut: renamed_branch
<code>git branch</code>
NOTA: Jangan padamkan cawangan melainkan perlu
Oleh kerana sebenarnya tidak ada kelemahan untuk menjaga cawangan, saya cadangkan tidak memadamkannya kecuali bilangan cawangan di repositori menjadi terlalu besar untuk dikendalikan.pilihan
yang digunakan di atas akan memadam cawangan walaupun cawangan tidak disegerakkan dengan cawangan jauh. Ini bermakna jika anda mempunyai komit yang tidak ditolak di cawangan semasa anda, -D
masih akan memadamkan cawangan anda tanpa sebarang amaran. Untuk memastikan anda tidak kehilangan data, anda boleh menggunakan -D
sebagai alternatif kepada -d
. -D
Padam cawangan hanya jika mereka telah disegerakkan dengan cawangan jauh. Oleh kerana cawangan kami belum disegerakkan, mari kita lihat apa yang berlaku jika kita menggunakan -d
, seperti yang ditunjukkan di bawah: -d
seperti yang anda lihat, Git akan memberi amaran kepada anda dan membatalkan operasi kerana data tidak digabungkan dengan cawangan.
Cawangan dan kepala
Sekarang kita mempunyai peluang untuk mencuba asas -asas cawangan, mari kita luangkan masa untuk membincangkan bagaimana cawangan bekerja di Git dan memperkenalkan konsep penting: kepala.
Seperti yang disebutkan di atas, cawangan hanya hubungan antara komitmen yang berbeza, atau melalui jalan komit. Harus diingat bahawa apabila menggunakan cawangan, kepala cawangan menunjuk kepada komit terkini di cawangan. Saya akan menyebut kepala beberapa kali dalam bab -bab berikut. Di Git, kepala menunjukkan komitmen terkini di cawangan. Dalam erti kata lain, ia merujuk kepada bahagian atas cawangan.
Cawangan pada dasarnya adalah penunjuk kepada komitmen yang mempunyai komitmen ibu bapa, komitmen nenek, dan sebagainya. Rantai komit ini membentuk jalan yang saya nyatakan di atas. Jadi, bagaimana untuk menghubungkan cawangan dan kepala? Nah, bahagian atas kepala dan titik cawangan semasa untuk komit yang sama. Mari lihat carta untuk menggambarkan idea ini:
seperti yang ditunjukkan di atas, pada mulanya merupakan cawangan aktif, dan titik kepala untuk melakukan C. Commit a adalah komitmen asas, tanpa sebarang orang tua, jadi komitmen dalam
adalah E → D → B → A. Ketua menunjuk kepada komitmen terkini cawangan aktif branch_A
, iaitu, komit C. Apabila kita menambah komit, ia akan ditambah ke cawangan aktif. Selepas melakukan, branch_A
menunjuk kepada F, dan cawangan mengikuti F → C → B → A, sementara branch_B
tetap sama. Ketua kini menunjuk kepada F. Sekali lagi, apabila kita menambah komit lain, perubahan itu ditunjukkan dalam angka itu. branch_A
branch_A
branch_B
cawangan maju: gabungan cawangan
Seperti yang disebutkan sebelumnya, salah satu kelebihan terbesar Git adalah bahawa ia sangat mudah untuk menggabungkan cawangan. Sekarang mari kita lihat bagaimana ia dilakukan.
kami akan membuat dua cawangan baru - new_feature
dan another_feature
- dan menambah beberapa komitmen maya. Memeriksa sejarah setiap cawangan menunjukkan kepada kami bahawa cawangan another_feature
memimpin satu komit seperti berikut:
untuk menggabungkan
new_feature
<code>git branch</code>
untuk menggabungkan dengan
aktif): another_feature
new_feature
new_feature
Hasilnya boleh ditunjukkan dalam angka di bawah:
<code>git branch -a</code>
Petua penting: Perhatikan kitaran
Imej di atas menunjukkan bahawa gabungan ini mencipta gelung di dua komitmen dalam sejarah projek anda di mana aliran kerja menyimpang dan menumpu masing -masing. Gelung sedemikian mungkin tidak menjadi masalah apabila bekerja bersendirian atau dalam pasukan kecil. Walau bagaimanapun, dalam pasukan yang lebih besar - mungkin terdapat banyak komitmen sejak anda menyimpang dari cawangan utama - gelung besar ini menjadikannya sukar untuk menavigasi sejarah dan memahami perubahan. Kami akan meneroka cara untuk menggabungkan cawangan menggunakan perintah rebase tanpa membuat gelung dalam bab 6.
Tidak ada "konflik" dalam gabungan ini. Alasannya adalah mudah, tiada komitmen baru ditambah ke cawangan
berbanding dengan cawangan. Konflik dalam Git berlaku apabila bahagian yang sama dari fail yang sama diubahsuai dalam komitmen bukan awam di kedua-dua cawangan. Git melemparkan konflik untuk memastikan anda tidak kehilangan sebarang data.
another_feature
Satu lagi cara untuk menggabungkan cawangan adalah gabungan ke hadapan yang tidak pantas, dengan menambahkan new_feature
selepas perintah gabungan. Dengan cara ini, komit baru dicipta di cawangan asas dengan perubahan dari cawangan lain. Anda juga perlu menentukan mesej penyerahan:
<code>git branch</code>
Dalam contoh di atas, bekas (gabungan new_feature
dengan cawangan utama) adalah gabungan ke hadapan yang cepat, sementara yang terakhir adalah gabungan ke hadapan yang tidak pantas dengan komit gabungan.
Walaupun gabungan gaya ke hadapan cepat adalah lalai, biasanya lebih baik menggunakan kaedah ke hadapan yang tidak cepat untuk bergabung dengan gabungan ke cawangan utama. Dalam jangka masa panjang, mengenal pasti komitmen baru yang menggabungkan ciri -ciri baru mungkin bermanfaat kerana secara logiknya memisahkan bahagian kod yang bertanggungjawab untuk ciri -ciri baru menjadi satu komit.
Kesimpulan
Apa yang telah anda pelajari?
Dalam bab ini, kita membincangkan cawangan apa dan bagaimana untuk menguruskannya dalam Git. Kami melihat membuat, mengubahsuai, memadam, dan menggabungkan cawangan.
Apa yang akan datang?
Saya telah bercakap tentang bagaimana Git baik untuk pemaju yang bekerja dengan pasukan. Ini diterokai dengan lebih terperinci dalam bab seterusnya, serta operasi dan arahan Git tertentu yang sering digunakan dalam pasukan yang diedarkan.
Soalan Lazim Mengenai Cawangan Git
Cawangan Git adalah ciri yang kuat yang membolehkan pemaju membuat garis pembangunan berasingan. Ini amat berguna apabila berurusan dengan ciri -ciri baru atau pembetulan, kerana ia membolehkan anda mengasingkan kerja anda dari projek utama. Selepas ciri atau pembetulan selesai dan diuji, ia boleh digabungkan kembali ke projek utama. Ini memastikan bahawa projek utama tetap stabil dan membolehkan beberapa pemaju mengendalikan fungsi yang berbeza secara serentak tanpa mengganggu satu sama lain.
Mewujudkan cawangan baru di Git adalah mudah. Anda boleh menggunakan perintah <code>git branch</code> diikuti dengan nama cawangan baru. Sebagai contoh, git branch new_feature
akan membuat cawangan baru yang dipanggil "New_Feature". Untuk beralih ke cawangan ini, anda boleh menggunakan perintah git checkout
seperti berikut: git checkout new_feature
.
Gabungkan cawangan dalam git menggunakan perintah git merge
. Sebelum menggabungkan, anda perlu berada di cawangan yang anda mahu bergabung. Sebagai contoh, jika anda ingin menggabungkan cawangan bernama "New_Feature" ke dalam cawangan "Master", anda perlu beralih ke cawangan utama menggunakan git checkout master
dan kemudian gunakan perintah git merge new_feature
.
penunjuk cawangan git adalah fail yang mengandungi hash sha1 komit yang ditunjukkannya. Apabila anda membuat cawangan baru, Git mencipta penunjuk baru dan menggerakkannya bersama -sama dengan setiap komit baru yang anda buat. Ini membolehkan Git mengesan sejarah projek.
Padam cawangan dalam Git menggunakan arahan git branch -d
diikuti dengan nama cawangan. Sebagai contoh, git branch -d old_feature
akan memadam cawangan bernama "Old_Feature". Walau bagaimanapun, jika cawangan mempunyai komit yang tidak digabungkan ke cawangan lain, GIT akan menghalang anda daripada memadam cawangan. Untuk memaksa penghapusan, anda boleh menggunakan pilihan -D
.
Fast forward gabungan dalam git adalah mungkin apabila terdapat laluan linear dari hujung cawangan semasa ke cawangan sasaran. Daripada membuat komit baru, Git menggerakkan penunjuk cawangan semasa ke cawangan sasaran. Sebaliknya, apabila tiada laluan linear, gabungan tripartit digunakan. GIT akan mewujudkan komit baru dengan dua ibu bapa, dengan berkesan menghubungkan kedua -dua cawangan.
anda boleh melihat semua cawangan dalam repositori git menggunakan perintah <code>git branch</code> tanpa parameter. Ini akan menyenaraikan semua cawangan tempatan. Jika anda juga ingin melihat cawangan jauh, anda boleh menggunakan pilihan -a
seperti berikut: <code>git branch -a</code>.
Namakan semula cawangan dalam Git menggunakan arahan git branch -m
diikuti oleh nama lama dan baru. Sebagai contoh, git branch -m old_name new_name
akan menamakan semula cawangan "old_name" kepada "new_name".
Kepala yang disebarkan di Git berlaku apabila anda menyemak komit bukannya cawangan. Ini boleh berbahaya kerana apabila anda menyemak ke cawangan lain, sebarang perubahan yang anda buat akan hilang. Untuk mengelakkan ini, pastikan anda sentiasa menyemak cawangan dan bukannya melakukan.
Apabila menggabungkan cawangan dalam Git, konflik mungkin berlaku jika bahagian yang sama dari fail yang sama diubah suai di kedua -dua cawangan. GIT akan menandakan fail sebagai "tidak diturunkan", anda perlu menyelesaikan konflik secara manual. Anda boleh melakukan ini dengan membuka fail dalam editor teks, mencari tanda konflik (<<<<<<<
), dan memutuskan perubahan yang perlu disimpan. Selepas semua konflik diselesaikan, anda boleh menambah fail menggunakan git add
dan menyerahkannya menggunakan git commit
.
Atas ialah kandungan terperinci Lompat Mula Git: Bercabang di Git. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!