Pengurusan cawangan Git
Hampir setiap sistem kawalan versi menyokong percabangan dalam beberapa bentuk. Menggunakan cawangan bermakna anda boleh bercabang dari barisan pembangunan utama dan terus bekerja tanpa menjejaskan talian utama.
Sesetengah orang memanggil model bercabang Git sebagai "ciri nirvana", dan kerana itulah ia membezakan Git daripada keluarga sistem kawalan versi.
Buat perintah cawangan:
git branch (branchname)
Tukar perintah cawangan:
git checkout (branchname)
Apabila anda menukar cawangan, Git akan menggantikan direktori kerja anda dengan syot kilat komited terakhir kandungan cawangan, jadi berbilang cawangan tidak memerlukan berbilang direktori.
Arahan gabungan cawangan:
git merge
Anda boleh bergabung ke cawangan yang sama beberapa kali, atau anda boleh memilih untuk memadamkan cawangan yang digabungkan terus selepas gabungan.
Pengurusan cawangan Git
Senaraikan cawangan
Arahan asas untuk menyenaraikan cawangan:
git branch
Tanpa parameter, cawangan git akan menyenaraikan cawangan anda secara setempat.
$ git branch * master
Apa maksud contoh ini ialah kita mempunyai cawangan yang dipanggil "tuan", dan cawangan ini ialah cawangan semasa.
Apabila anda melaksanakan git init, Git akan mencipta cawangan "master" untuk anda secara lalai.
Jika kita ingin mencipta cawangan secara manual dan beralih kepadanya. Hanya laksanakan cawangan git (nama cawangan).
$ git branch testing $ git branch * master testing
Kini kita dapat melihat bahawa terdapat ujian cawangan baru.
Apabila anda mencipta cawangan baharu selepas kemas kini terakhir komit dengan cara ini, jika terdapat kemas kini komit kemudian, dan kemudian anda beralih ke cawangan "pengujian", Git akan memulihkan direktori kerja anda pada masa anda mencipta cawangan itu.
$ ls README $ echo 'w3cschool.cc' > test.txt $ git add . $ git commit -m 'add test.txt' [master 048598f] add test.txt 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100644 hello.php create mode 100644 test.txt $ ls README test.txt $ git checkout testing Switched to branch 'testing' $ ls README hello.php
Apabila kami beralih ke cawangan "pengujian", fail test.txt baharu yang kami tambah telah dialih keluar dan fail hello.php yang dipadamkan pada asalnya muncul semula. Apabila beralih kembali ke cawangan "tuan", mereka muncul semula.
$ git checkout master Switched to branch 'master' $ ls README test.txt
Kami juga boleh menggunakan perintah git checkout -b (nama cawangan) untuk mencipta cawangan baharu dan segera beralih ke cawangan ini untuk beroperasi di cawangan ini.
$ git checkout -b newtest Switched to a new branch 'newtest' $ git rm test2.txt rm 'test2.txt' $ ls README test.txt $ git commit -am 'removed test2.txt' [newtest 556f0a0] removed test2.txt 1 file changed, 1 deletion(-) delete mode 100644 test2.txt $ git checkout master Switched to branch 'master' $ ls README test.txt test2.txt
Seperti yang anda boleh lihat, kami mencipta cawangan, mengalih keluar beberapa fail dalam konteks cawangan itu, kemudian bertukar kembali ke cawangan induk kami dan fail tersebut kembali.
Gunakan cawangan untuk memisahkan kerja, membolehkan kami melakukan perkara dalam konteks yang berbeza dan bertukar-tukar.
Padam cawangan
Padamkan arahan cawangan:
git branch -d (branchname)
Sebagai contoh, kami ingin memadamkan cawangan "pengujian":
$ git branch * master testing $ git branch -d testing Deleted branch testing (was 85fc7e7). $ git branch * master
Cawangan gabungan
Sebaik sahaja cawangan mempunyai kandungan bebas, anda akhirnya mahu menggabungkannya kembali ke cawangan utama anda. Anda boleh menggunakan arahan berikut untuk menggabungkan mana-mana cawangan ke dalam cawangan semasa:
git merge
$ git branch * master newtest $ ls README test.txt test2.txt $ git merge newtest Updating 2e082b7..556f0a0 Fast-forward test2.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test2.txt $ ls README test.txt
Dalam contoh di atas, kami menggabungkan cawangan terbaharu ke dalam cawangan utama dan fail test2.txt telah dipadamkan.
Gabung konflik
Gabung bukan sekadar operasi mudah untuk menambah dan mengalih keluar fail, Git juga akan menggabungkan pengubahsuaian.
$ git branch * master $ cat test.txt w3cschool.cc
Mula-mula, kami mencipta cawangan yang dipanggil "change_site", bertukar kepadanya dan menukar kandungan kepada www.w3cschool.cc.
$ git checkout -b change_site Switched to a new branch 'change_site' $ vim test.txt $ head -1 test.txt www.w3cschool.cc $ git commit -am 'changed the site' [change_site d7e7346] changed the site 1 file changed, 1 insertion(+), 1 deletion(-)
Serahkan kandungan yang diubah suai ke cawangan "change_site". Sekarang, jika kita beralih kembali kepada cawangan "master", kita dapat melihat bahawa kandungan dipulihkan kepada keadaan sebelum kita mengubah suainya dan kita mengubah suai fail test.txt sekali lagi.
$ git checkout master Switched to branch 'master' $ head -1 test.txt w3cschool.cc $ vim test.txt $ cat test.txt w3cschool.cc 新增加一行 $ git diff diff --git a/test.txt b/test.txt index 704cce7..f84c2a4 100644 --- a/test.txt +++ b/test.txt @@ -1 +1,2 @@ w3cschool.cc +新增加一行 $ git commit -am '新增加一行' [master 14b4dca] 新增加一行 1 file changed, 1 insertion(+)
Perubahan kini direkodkan dalam cawangan "tuan" saya. Seterusnya kami menggabungkan cawangan "change_site".
$ git merge change_site Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. $ cat test.txt <<<<<<< HEAD w3cschool.cc 新增加一行 ======= www.w3cschool.cc >>>>>>> change_site
Kami menggabungkan cawangan sebelumnya ke dalam cawangan "master", dan konflik gabungan berlaku Seterusnya, kami perlu mengubah suainya secara manual.
$ vim test.txt $ cat test.txt www.w3cschool.cc 新增加一行 $ git diff diff --cc test.txt index f84c2a4,bccb7c2..0000000 --- a/test.txt +++ b/test.txt @@@ -1,2 -1,1 +1,2 @@@ - w3cschool.cc + www.w3cschool.cc +新增加一行
Dalam Git, kita boleh menggunakan git add untuk memberitahu Git bahawa konflik fail telah diselesaikan
$ git status -s UU test.txt $ git add test.txt $ git status -s M test.txt $ git commit [master 88afe0e] Merge branch 'change_site'
Sekarang kita telah berjaya menyelesaikan konflik dalam gabungan dan melaksanakan hasilnya.