Conflict
#HelloGameDev #HelloErmine #HelloWorld2021
จากตัวอย่างก่อนหน้านี้ ในขณะที่กำลัง merge อยู่นั้น จะเห็นว่าระหว่างโค้ดของนาย A และนาย B มีการแก้โค้ดที่จุดเดียวกัน ดังนั้น Git จะแจ้งว่าเกิด conflict หรือก็คือโค้ดที่ทับซ้อนกันนั่นเอง
ซึ่งนาย 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?