เข้าใจ Branch, Pull Request และ Merge Conflict แบบง่าย ๆ
การเขียนโปรแกรมในโลกจริงไม่ใช่งานที่ทำคนเดียว แต่เป็นการทำงานร่วมกันเป็นทีม Git จึงเป็นเครื่องมือสำคัญที่ช่วยให้หลายคนสามารถแก้ไขโค้ดพร้อมกันได้อย่างเป็นระบบ บทความนี้จะพานักเรียนทำความเข้าใจ 3 เรื่องหลัก ได้แก่ การใช้ Branch, การเปิด Pull Request และการแก้ปัญหา Merge Conflict
- การใช้ Branch
- การเปิด Pull Request
- การแก้ Merge Conflict
ตัวอย่างด้านล่างเป็นเพียง “สถานการณ์สมมติ” เพื่อการเรียนรู้ ไม่ใช่คำตอบของใบงานนักเรียน
1) การทำงานด้วย Branch
ในการพัฒนาโปรแกรม ไม่ควรแก้ไขโค้ดบน main โดยตรง แต่ควรสร้างพื้นที่ทำงานของตนเองผ่าน Branch เพื่อป้องกันความผิดพลาดและให้สามารถทำงานคู่ขนานกับเพื่อนได้
ตัวอย่างการสร้าง Branch
git checkout -b feature/profile-pageจากนั้นสร้างไฟล์ตัวอย่างชื่อ profile.txt
My Profile
I like coding
I study at school
I learn Git
Nice to meet youเมื่อแก้ไขเสร็จให้บันทึกงานด้วยคำสั่ง
git add profile.txt
git commit -m "create profile page draft"
git push -u origin feature/profile-page2) Pull Request คืออะไร
Pull Request เปรียบเสมือนการส่งงานให้เพื่อนหรือครูช่วยตรวจสอบ ก่อนที่จะนำไปรวมกับงานหลัก
“การส่งการบ้านให้ครูตรวจก่อนรวมเข้างานหลัก”
ข้อดีของ Pull Request
- เพื่อนช่วยตรวจโค้ดได้
- ป้องกันโค้ดที่ผิดพลาดเข้าสู่ระบบหลัก
- เห็นประวัติการแก้ไขอย่างชัดเจน
ขั้นตอนทั่วไป
- push branch ของเรา
- เข้า GitHub
- กด New Pull Request
- เลือก branch ของเราไปยัง main
- ใส่คำอธิบายงาน
3) ตัวอย่างสถานการณ์ Merge Conflict
ในการทำงานเป็นทีม สิ่งที่พบได้บ่อยมากคือ Merge Conflict ซึ่งเกิดจากการที่หลายคนแก้ไขไฟล์เดียวกันพร้อมกัน Git จึงต้องให้ผู้ใช้ตัดสินใจเลือกผลลัพธ์ที่ถูกต้องด้วยตนเอง
ตัวอย่างนี้เป็นเพียงสถานการณ์จำลอง เพื่อให้นักเรียนเข้าใจแนวคิดการแก้ปัญหา
ทำไม Conflict ถึงเกิดขึ้น
- มีผู้แก้ไขมากกว่า 1 คน
- แก้ไฟล์เดียวกัน
- แก้บรรทัดเดียวกัน
- ยังไม่ได้ดึงงานล่าสุดก่อน
เมื่อเกิดเหตุการณ์นี้ Git จะไม่ตัดสินใจแทน แต่ให้ผู้ใช้เป็นผู้เลือกวิธีรวมโค้ด
สถานการณ์ตัวอย่าง
สมมติว่ามีนักเรียน 2 คนแก้ไฟล์ README.md พร้อมกัน
Message from Student AMessage from Student Bเมื่อคนที่สองพยายาม push จะพบข้อความลักษณะนี้
! [rejected] main -> main (fetch first)
error: failed to push some refsนี่คือสัญญาณว่าจำเป็นต้อง pull งานล่าสุดก่อน
ขั้นตอนการแก้ปัญหา
1) ดึงโค้ดล่าสุด
git pull origin mainGit จะแจ้งว่ามี conflict ที่ไฟล์ README.md
2) เปิดไฟล์ที่มีปัญหา
<<<<<<< HEAD
Message from Student B
=======
Message from Student A
>>>>>>> 7ac91dความหมายคือ
ส่วนบน = เวอร์ชันของเรา
ส่วนล่าง = เวอร์ชันจากเพื่อน
3) แก้ไขผลลัพธ์
Message from Student A and Student Bจากนั้นลบเครื่องหมายพิเศษออกทั้งหมด
4) บันทึกหลังแก้
git add README.md
git commit -m "combine messages from both students"
git push origin mainเพียงเท่านี้ conflict ก็จะถูกแก้ไขเรียบร้อย
สิ่งที่นักเรียนควรสังเกต
- Conflict เป็นกลไกป้องกันข้อมูลทับกัน ไม่ใช่ข้อผิดพลาดร้ายแรง
- การแก้ต้องอ่านโค้ดให้เข้าใจ ไม่ควรลบแบบสุ่ม
- ลำดับสำคัญคือ pull → แก้ → add → commit → push
เทคนิคทำงานเป็นทีม
- พูดคุยกันก่อนแก้ไฟล์เดียวกัน
- pull ทุกครั้งก่อนเริ่มงาน
- เขียน commit message ให้สื่อความหมาย
- แก้งานทีละส่วนเล็ก ๆ
หลักฐานที่ควรบันทึกในการเรียน
- ภาพหน้าจอ error ตอน push ไม่ผ่าน
- ภาพไฟล์ขณะเห็นเครื่องหมาย conflict
- ภาพหลังแก้ไขสำเร็จ
- คำสั่งที่ใช้แก้ปัญหา
หลักฐานเหล่านี้คือแนวทางเดียวกับที่นักพัฒนาซอฟต์แวร์ใช้ในการทำงานจริง
