Latest web development tutorials

สาขาการจัดการ Git

เกือบทุกระบบการควบคุมเวอร์ชันสนับสนุนรูปแบบของสาขาบาง มันหมายความว่าคุณสามารถใช้สาขาจากสายหลักของการพัฒนาที่จะแยกและไม่ส่งผลกระทบต่อสายหลักในขณะที่ยังคงทำงาน

ใครบางคน Git แตกแขนงรูปแบบที่เรียกว่า "ลักษณะนิพพาน" แต่อย่างแม่นยำเพราะมันแตกต่างไปจากระบบการควบคุมเวอร์ชัน Git สำหรับครอบครัว

สร้างการเรียนการสอนสาขา:

git branch (branchname)

สาขาคำสั่งสลับ:

git checkout (branchname)

เมื่อคุณเปลี่ยนสาขา Git จะใช้สาขาภาพรวมการส่งสุดท้ายแทนที่เนื้อหาของไดเรกทอรีที่ทำงานของคุณหลายสาขาไม่จำเป็นต้องมีไดเรกทอรีหลาย

ผสานสาขาคำสั่ง:

git merge 

คุณสามารถผสานเป็นสาขาแบบครบวงจรหลายครั้งคุณยังสามารถเลือกที่จะลบโดยตรงหลังจากการควบรวมกิจการจะรวมสาขา


สาขาการจัดการ Git

สาขารายการ

คำสั่งพื้นฐานที่ระบุไว้ในสาขา:

git branch

เมื่อการขัดแย้งใดสาขาคอมไพล์จะอยู่ในสาขาท้องถิ่นของคุณ

$ git branch
* master

ในกรณีนี้มันหมายความว่าเราได้เรียกว่าเป็น "ต้นแบบ" สาขาและสาขาเป็นสาขาในปัจจุบัน

เมื่อคุณเรียก init Git เริ่มต้น Git จะสร้าง "ต้นแบบ" สาขาสำหรับคุณ

ถ้าเราต้องการที่จะสร้างด้วยตนเองที่สาขาและเปลี่ยนไป ดำเนินการสาขา Git (BRANCHNAME) สามารถ

$ git branch testing
$ git branch
* master
  testing

ตอนนี้เราจะเห็นว่ามีการทดสอบสาขาใหม่

เมื่อคุณส่งการปรับปรุงในลักษณะนี้ในช่วงสร้างสาขาใหม่ถ้าหลังจากนั้นก็ส่งปรับปรุงและแล้วสลับไปที่ "การทดสอบ" สาขา Git จะเรียกคืนไดเรกทอรีที่ทำงานของคุณให้มีลักษณะเหมือนเมื่อคุณสร้างสาขา

ต่อไปเราจะแสดงให้คุณวิธีการสลับสาขาเราเปลี่ยนกับ Git เช็คเอาท์ (Branch) ว่าเราต้องการที่จะปรับเปลี่ยนสาขา

$ 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

เมื่อเราเปลี่ยนไป "การทดสอบ" สาขาเราเพิ่มไฟล์ test.txt ใหม่จะถูกลบออก hello.php ไฟล์ไฟล์ต้นฉบับจะถูกลบออกได้โผล่ออกมา เปลี่ยนกลับไป "ต้นแบบ" สาขาที่พวกเขาได้โผล่ออกมาอีกครั้ง

$ git checkout master
Switched to branch 'master'
$ ls
README		test.txt

นอกจากนี้เรายังสามารถใช้ Git เช็คเอาท์ -b (BRANCHNAME) คำสั่งเพื่อสร้างสาขาใหม่และทันทีที่เปลี่ยนไปสาขาเพื่อที่จะทำงานในสาขาที่

$ 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

ที่คุณสามารถดูเราได้สร้างสาขาลบไฟล์บางอย่างในบริบทของสาขานี้แล้วสลับกลับไปยังสาขาหลักของเราไฟล์เหล่านั้นกลับมา

ใช้สาขาตัดแยกต่างหากจะทำงานเพื่อให้เราสามารถทำสิ่งในบริบทที่แตกต่างกันและสลับไปมา

นำกิ่งไม้

นำการเรียนการสอนสาขา:

git branch -d (branchname)

ตัวอย่างเช่นเราต้องการที่จะลบ "ทดสอบ" สาขา:

$ git branch
* master
  testing
$ git branch -d testing
Deleted branch testing (was 85fc7e7).
$ git branch
* master

ผสานสาขา

เมื่อสาขามีเนื้อหาที่เป็นอิสระในที่สุดคุณจะต้องการผสานมันกลับเข้ามาในสาขาหลักของคุณ คุณสามารถใช้คำสั่งต่อไปนี้เพื่อทุกสาขารวมเข้าไปในสาขาปัจจุบัน:

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

ตัวอย่างข้างต้นเราจะ newtest ผสานเข้ากับสาขาหลักสาขาไฟล์ test2.txt จะถูกลบออก

ผสานความขัดแย้ง

รวมกันและไม่เพียงแค่เพิ่มไฟล์ดำเนินการลบออก Git ยังจะผสานการเปลี่ยนแปลงนั้น

$ git branch
* master
$ cat test.txt
w3cschool.cc

ครั้งแรกที่เราสร้างไดเรกทอรีที่เรียกว่า "change_site" การสลับสาขาในอดีตที่ผ่านมาเราจะเป็นเนื้อหาที่จะ 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(-)
 

เนื้อหาที่มีการปรับเปลี่ยนที่ส่งไปยัง "change_site สาขา" ตอนนี้ถ้าคุณเปลี่ยนกลับไปเป็น "ต้นแบบ" สาขาที่เราสามารถกลับไปดูเนื้อหาของการปรับเปลี่ยนของเราก่อนที่เราจะแก้ไขไฟล์ test.txt อีกครั้ง

$ 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(+)
 

ตอนนี้การเปลี่ยนแปลงเหล่านี้ได้รับการบันทึกไว้ใน "ต้นแบบ" ของฉันของสาขา ต่อไปเราจะ "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

เราจะผสานก่อนที่สาขา "ต้นแบบ" สาขาการผสานความขัดแย้งเกิดขึ้นแล้วเราจะต้องแก้ไขด้วยตนเอง

$ 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
 +新增加一行

ใน Git, Git เพิ่มว่าเราสามารถใช้เพื่อบอก Git ไฟล์ความขัดแย้งได้รับการแก้ไข

$ git status -s
UU test.txt
$ git add test.txt 
$ git status -s
M  test.txt
$ git commit
[master 88afe0e] Merge branch 'change_site'

ตอนนี้เราได้รับการแก้ไขเรียบร้อยแล้วผสานความขัดแย้งและส่งผล