Conflict

#HelloGameDev #HelloErmine #HelloWorld2021

จากตัวอย่างก่อนหน้านี้ ในขณะที่กำลัง merge อยู่นั้น จะเห็นว่าระหว่างโค้ดของนาย A และนาย B มีการแก้โค้ดที่จุดเดียวกัน ดังนั้น Git จะแจ้งว่าเกิด conflict หรือก็คือโค้ดที่ทับซ้อนกันนั่นเอง

Conflict : เมื่อหลายคนบังเอิญแก้จุดเดียวกันแล้วทำการ Merge

ซึ่งนาย A ก็ต้องแก้ conflict นี้ให้เรียบร้อยถึงจะ merge commit แล้ว push ขึ้น Remote repository ได้ ซึ่งตอนที่เกิด Conflict แล้วเปิดโค้ดดังกล่าวขึ้นมา ก็จะเป็นแบบนี้

void main() {
<<<<<<< HEAD
    method1();
    method2();
=======
    method3();
    method4();
>>>>>>> 322d39a003e4d9...
}

โดยสังเกตรูปแบบของเครื่องหมาย <<<, === และ >>> ให้ดี ๆ แล้วจะเห็นว่าจริง ๆ มันมีรูปแบบที่เข้าใจได้ง่ายมาก โดยที่

  • โค้ดที่อยู่ระหว่าง <<< และ === คือ โค้ดของนาย A

  • โค้ดที่อยู่ระหว่าง === และ >>> คือ โค้ดของนาย B

  • ตัวเลขต่อท้าย คือ หมายเลขของ commit ที่ทำการ merge

เพื่อให้โค้ดทำงานได้เหมาะสม นาย A ก็จะต้องเอาโค้ดที่ตัวเองแก้ไข ไปรวมกับโค้ดของนาย B ให้ทำงานได้

void main() {
    method2();
    method3();
    method4();
}

เมื่อเสร็จแล้วก็ให้ commit (ซึ่งจะเป็นการ merge commit) อีกครั้ง นาย A ก็จะสามารถ push ขึ้น Remote repository ได้แล้ว (โดยนาย B ก็ต้อง pull commit ตัวนี้ภายหลังเช่นกัน และถ้าทั้งคู่บังเอิญไปแก้ไขข้อมูลที่เดิมซ้ำอีกก็อาจจะเกิด conflict ได้)

ดังนั้น conflict ถือว่าเป็นเหตุการณ์ที่เกิดขึ้นได้เป็นปกติ โดยเฉพาะอย่างยิ่งโปรเจคขนาดใหญ่ที่มี Developer หลาย ๆ คนช่วยกันร่วมเขียนโค้ด การแก้ conflict จึงเป็นหนึ่งในพื้นฐานของการใช้งาน Git ที่ Developer ต้องเข้าใจและจัดการกับมันได้ ไม่เช่นนั้นจะเกิดปัญหา เช่น เผลอไปลบโค้ดของเพื่อนโดยไม่สนใจอะไรเพื่อให้ conflict หายไป เป็นต้น

เมื่อสรุปขั้นตอนของการแก้ conflict จะเป็นแบบนี้

  • pull จาก Remote repository ลงเครื่องตัวเอง

  • conflict เกิดขึ้น

  • ปรับแก้ไขโค้ดให้เหมาะสม

  • merge commit

  • push ขึ้น Remote repository

Last updated

Was this helpful?