- ทำความเข้าใจเกี่ยวกับแนวคิดของการแตกแขนง (conflicts)
- การเปลี่ยนแปลงและการยอมรับการเปลี่ยนแปลง (Committing)
- รวมสาขา (Merging Branches)
- การแก้ไขข้อขัดแย้งในการผสาน (Merge Conflicts)
- ทำความเข้าใจกับการผสาน (Merges) แบบ Fast-Forward
การทำแอพ หนึ่งในองค์ประกอบที่สำคัญที่สุดคือการควบคุมแหล่งที่มาที่มีประสิทธิภาพ Git ซึ่งเป็นระบบควบคุมเวอร์ชันแบบกระจาย (VCS) มีคุณสมบัติมากมายที่ทำให้การจัดการซอร์สโค้ดง่ายขึ้น คุณสมบัติที่ทรงพลังที่สุดสองอย่างคือสาขาและการผสานของ Git พวกเขาให้ความยืดหยุ่นและอำนวยความสะดวกในการทำแอพร่วมกันระหว่างสมาชิกในทีม ทำให้หลายคนสามารถทำงานบนคุณสมบัติที่แตกต่างกันได้พร้อมกันโดยไม่รบกวนการทำงานของกันและกัน
1. ทำความเข้าใจเกี่ยวกับแนวคิดของการแตกแขนง (Branching)
ในรูปแบบที่ง่ายที่สุด แบรนช์ใน Git เป็นชุดของการเปลี่ยนแปลงโค้ดที่ไม่ซ้ำใครพร้อมชื่อที่ไม่ซ้ำใคร ที่เก็บแต่ละแห่งสามารถมีหนึ่งสาขาขึ้นไป และสาขาหลัก (เรียกอีกอย่างว่าสาขา ‘master’ ใน Git เวอร์ชันเก่า) เป็นสาขาเริ่มต้นเมื่อคุณสร้างที่เก็บ (repository)
เพื่อแสดงให้เห็น สมมติว่าคุณกำลังทำแอพสภาพอากาศ คุณมีmain
สาขาที่อยู่ในสถานะปรับใช้เสมอ คุณต้องการเพิ่มคุณลักษณะใหม่ให้กับแอปของคุณที่แสดงระดับความชื้น แทนที่จะแก้ไข main
สาขาโดยตรง (และอาจทำให้เกิดข้อบกพร่อง) คุณต้องสร้างสาขาใหม่ที่ add-humidity-feature
ชื่อว่า สาขาใหม่นี้เป็น main
สาขาที่ซ้ำกันอย่างสมบูรณ์แบบในขณะที่สร้าง
หากต้องการสร้างสาขาใหม่ คุณจะต้องใช้คำสั่ง git branch add-humidity-feature
: สิ่งนี้สร้างสาขาใหม่ แต่คุณยังคงอยู่ใน main
สาขา หากต้องการสลับไปยังสาขาที่สร้างขึ้นใหม่ ให้ใช้คำสั่ง git checkout add-humidity-feature
:
2. การเปลี่ยนแปลงและการยอมรับการเปลี่ยนแปลง (Committing)
ใน add-humidity-feature
สาขา คุณสามารถเปลี่ยนแปลงโค้ดแอปพลิเคชันได้ เช่น เพิ่มฟังก์ชันใหม่หรือแก้ไขที่มีอยู่เพื่อรองรับคุณสมบัติการแสดงความชื้นใหม่ หลังจากทำการเปลี่ยนแปลงแล้ว ให้คุณจัดลำดับไฟล์ที่แก้ไขด้วย git add .
และยอมรับการเปลี่ยนแปลงด้วย git commit -m "Add humidity feature"
.
การเปลี่ยนแปลงเหล่านี้มีผลเฉพาะกับ add-humidity-feature
สาขาและจะไม่ส่งผลกระทบต่อmain
สาขา ทำให้สามารถพัฒนาแบบแยกส่วนได้ คุณสามารถทดลองฟีเจอร์ใหม่ๆ ได้อย่างอิสระโดยไม่ต้องกังวลว่าmain
สาขา จะแตก
3. รวมสาขา (Merging Branches)
เมื่อคุณลักษณะใหม่เสร็จสมบูรณ์และผ่านการทดสอบแล้ว ก็ถึงเวลารวมการเปลี่ยนแปลงจากลง add-humidity-feature
ใน main
การผสานคือกระบวนการรับการเปลี่ยนแปลงจากสาขาหนึ่ง (ในกรณีนี้ add-humidity-feature
) และรวมเข้ากับอีกสาขาหนึ่ง (ในกรณีนี้ main
)
อันดับแรก เปลี่ยนกลับไปที่main
สาขาโดยใช้ git checkout main
จากนั้นหากต้องการรวมสาขาใหม่เข้าไป main
ให้ใช้คำสั่ง git merge add-humidity-feature
: จากนั้น Git จะรวมคอมมิชชันจาก add-humidity-feature
สาขาเข้ากับmain
สาขา
4. การแก้ไขข้อขัดแย้งในการผสาน (Merge Conflicts)
บางครั้งเมื่อคุณพยายามรวมสาขา Git ไม่สามารถรวมการเปลี่ยนแปลงได้อย่างราบรื่นเนื่องจากสาขาแยกออกจากกัน จุดแตกต่างเหล่านี้คือ ‘conflicts’ ที่ Git ไม่สามารถแก้ไขได้โดยอัตโนมัติและต้องมีการแทรกแซงด้วยตนเอง
ตัวอย่างเช่น สมมติว่าคนสองคนกำลังใช้งานแอพพยากรณ์อากาศพร้อมกัน คนหนึ่งทำงานใน add-humidity-feature
สาขา และอีกคนทำงานใน main
สาขา ทั้งคู่แก้ไขบรรทัดเดียวกันในไฟล์เดียวกัน Git ไม่มีทางรู้ว่าการเปลี่ยนแปลงใดถูกต้องและตั้งค่าสถานะนี้ว่าขัดแย้งกัน
เมื่อมีข้อขัดแย้งเกิดขึ้น Git จะแสดงข้อความแจ้งว่ามีข้อขัดแย้ง และการเรียกใช้ git status
จะแสดงไฟล์ที่ต้องการการแก้ไขข้อขัดแย้ง ภายในไฟล์เหล่านั้น Git จะทำเครื่องหมายบริเวณที่มีข้อขัดแย้งเกิดขึ้น เพื่อให้คุณสามารถแก้ไขได้ด้วยตนเอง พื้นที่ที่ขัดแย้งกันจะถูกล้อมรอบด้วย <<<<<<
, ======
, และ >>>>>>
ซึ่งระบุโค้ดที่ขัดแย้งกันจากสองสาขาที่แตกต่างกัน
คุณจะต้องแก้ไขไฟล์ด้วยตนเองเพื่อแก้ไขข้อขัดแย้ง นำเครื่องหมายข้อขัดแย้งออก จากนั้นจัดลำดับและยืนยันไฟล์ที่แก้ไขแล้ว
5. ทำความเข้าใจกับการผสาน (Merges) แบบ Fast-Forward
ในบางกรณี เมื่อคุณรวมสองสาขาเข้าด้วยกัน Git จะทำการผสานที่เรียกว่า “fast-forward” สิ่งนี้เกิดขึ้นเมื่อไม่มีคอมมิชชันใหม่ใน main
สาขาตั้งแต่คุณสร้าง add-humidity-feature
สาขา
ในการผสานไปข้างหน้าอย่างรวดเร็ว Git เพียงแค่เลื่อน HEAD
ตัวชี้ขึ้นไปที่การกระทำล่าสุดใน add-humidity-feature
สาขา เป็นการรวมประวัติของทั้งสองสาขาอย่างมีประสิทธิภาพ เนื่องจากไม่มีความแตกต่างระหว่างทั้งสองสาขา
การแตกสาขาและการรวมเป็นแนวคิดพื้นฐานสองประการของ Git ที่นักพัฒนาแอปทุกคนจำเป็นต้องเข้าใจ Branches จัดเตรียมสภาพแวดล้อมแบบแยกส่วนสำหรับทุกฟีเจอร์หรือการแก้ไขจุดบกพร่อง ทำให้การทดสอบปลอดภัยโดยไม่ส่งผลกระทบต่อโค้ดเบสหลัก การผสานช่วยให้นักพัฒนาสามารถรวมความพยายามของพวกเขาเข้าด้วยกัน ผสานรวมการเปลี่ยนแปลงจากสาขาหนึ่งไปยังอีกสาขาหนึ่ง การทำความเข้าใจวิธีนำทางความขัดแย้งเป็นกุญแจสำคัญในการทำงานร่วมกันอย่างมีประสิทธิภาพโดยใช้ Git
คำสั่งเหล่านี้ไม่ใช่แค่คำสั่งที่ต้องจำ แต่เป็นแนวคิดที่ต้องทำความเข้าใจ เป็นพื้นฐานของเวิร์กโฟลว์และแนวทางปฏิบัติมากมายในทีมพัฒนามืออาชีพ เมื่อคุณทำแอพและทำงานร่วมกันในโครงการต่อไป คุณจะพบว่าการแยกสาขาและการรวมเป็นเครื่องมือที่ทรงคุณค่าในชุดเครื่องมือ Git ของคุณ