Tutorial Git Mu...login
Tutorial Git Mula Pantas
pengarang:php.cn  masa kemas kini:2022-04-11 13:44:34

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.

Laman web PHP Cina