Merge commit

#HelloGameDev #HelloErmine #HelloWorld2021

ในส่วนของ merge commit นั้นจะเป็นยกตัวอย่างกรณีจริงที่มักเกิดขึ้นเมื่อมีคนกลุ่มหนึ่งลงมือทำโค้ดร่วมกัน

โดยสมมติว่านาย A กับนาย B เขียนโค้ดด้วยกันอยู่ และทั้งคู่ก็เขียนโค้ดที่อยู่ในไฟล์เดียวกัน ดังรูปตัวอย่าง

นาย A เพิ่ม method2 ต่อท้าย method1 ส่วนนาย B ลบ method1 ออก แล้วเพิ่ม method3 กับ method4 เข้าไป

นาย B เขียนโค้ดเสร็จแล้ว ก็เลย commit ไฟล์ที่ตัวเองเขียนเสร็จแล้ว push ขึ้น Remote repository

นาย B ทำการ Push ข้อมูลขึ้น Remote repository ก่อนนาย A

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

“Push ก่อนได้เปรียบ” นาย B ไม่ได้กล่าวไว้

ดังนั้น สิ่งที่นาย A ต้องทำก่อนที่จะ push ของตัวเองขึ้นไปได้ ก็คือจะต้อง pull จาก Remote repository ลงมาใหม่ก่อนเพื่ออัปเดต commit ที่นาย B ได้ push ขึ้นไป ซึ่งเราเรียกขั้นตอนนี้ว่า merge commit นั่นเอง

Merge Commit : เมื่อมีคนอื่นชิง Push ก่อนหน้าแล้วเราต้อง Pull มาใหม่เพื่ออัปเดตของตัวเองก่อนส่งตามหลัง

จากตัวอย่าง จะเห็นว่าโค้ดของนาย A และ B แก้ที่บรรทัดเดียวกัน แต่โค้ดออกมาไม่เหมือนกัน ในจุดนี้ก็จะเป็นผลต่อเนื่องไปสู่อีกหนึ่งปัญหาพื้นฐานที่ Developer ควรรู้นั่นเอง (ซึ่งส่วนนี้จะมีการอธิบายในหัวข้อ conflict ต่อไป)

นอกจากนี้ยังพบในกรณีที่โค้ดสามารถ merge ได้ปกติ เช่น

//code เดิม
void main() {
    method1();
}

//code ที่นาย A แก้ไข
void main() {
    method2();
    method1();
}

//code ที่นาย B แก้ไข
void main() {
    method3();
    method1();
}

เมื่อ merge เข้าด้วยกัน จะได้ผลลัพธ์ออกมาเป็นแบบนี้

void main() {
    method2();  // code ของนาย A
    method1();
    method3();  // code ของนาย B
}

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

Last updated

Was this helpful?