Skip to main content

Handling Merge Conflicts

Merge Conflict เป็นสถานการณ์ที่เกิดขึ้นเมื่อ Git ไม่สามารถรวมการเปลี่ยนแปลงจาก branch สอง branch ได้โดยอัตโนมัติ เนื่องจากมีการแก้ไขในส่วนเดียวกันของไฟล์หรือโครงสร้างที่ขัดแย้งกัน

1. สาเหตุของ Merge Conflicts

  • การแก้ไขในไฟล์เดียวกันใน branch สอง branch
  • การลบไฟล์ใน branch หนึ่งและแก้ไขไฟล์ในอีก branch หนึ่ง
  • การเปลี่ยนชื่อไฟล์ใน branch หนึ่งและแก้ไขไฟล์ในอีก branch หนึ่ง

2. การตรวจพบ Merge Conflicts

เมื่อมีการ merge branch ที่มี conflicts คุณจะเห็นข้อความแสดงข้อผิดพลาด เช่น:

Auto-merging <ชื่อไฟล์>
CONFLICT (content): Merge conflict in <ชื่อไฟล์>
Automatic merge failed; fix conflicts and then commit the result.

3. ขั้นตอนการแก้ไข Merge Conflicts

3.1 ตรวจสอบไฟล์ที่มี Conflict

ใช้คำสั่งต่อไปนี้เพื่อตรวจสอบไฟล์ที่มีปัญหา:

git status

ตัวอย่างผลลัพธ์:

On branch main
You have unmerged paths.
(fix conflicts and run "git commit")

Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: example.txt

3.2 เปิดไฟล์และแก้ไข Conflict

ในไฟล์ที่มี Conflict Git จะเพิ่มเครื่องหมายพิเศษเพื่อแสดงส่วนที่ขัดแย้ง:

<<<<<<< HEAD
เนื้อหาใน branch ปัจจุบัน
=======
เนื้อหาใน branch ที่จะ merge
>>>>>>>
  • <<<<<<< HEAD แสดงส่วนของ branch ปัจจุบัน
  • ======= แสดงจุดแยกระหว่าง branch
  • >>>>>>> แสดงส่วนของ branch ที่จะ merge

แก้ไขไฟล์โดยลบเครื่องหมายพิเศษและรวมเนื้อหาตามที่ต้องการ:

เนื้อหาที่รวมแล้ว

3.3 เพิ่มไฟล์เข้า Staging Area

หลังจากแก้ไขเสร็จ ให้เพิ่มไฟล์ที่แก้ไขแล้วเข้า staging area:

git add <ชื่อไฟล์>

3.4 Commit การแก้ไข

ทำการ commit เพื่อบันทึกการแก้ไข conflicts:

git commit -m "แก้ไข merge conflict ใน <ชื่อไฟล์>"

4. การยกเลิก Merge ที่มี Conflict

หากคุณต้องการยกเลิก merge และกลับไปยังสถานะก่อนหน้า:

git merge --abort

คำสั่งนี้จะยกเลิกการ merge และคืนสถานะ repository ไปยังสถานะก่อนเริ่ม merge

5. การใช้เครื่องมือช่วยแก้ไข Conflict

Git รองรับเครื่องมือช่วยแก้ไข conflicts เช่น:

  • VS Code: มีอินเทอร์เฟซที่ใช้งานง่ายในการจัดการ conflicts
  • KDiff3, Meld หรือ P4Merge: สามารถกำหนดค่าให้ใช้กับ Git ได้

การตั้งค่าเครื่องมือช่วยแก้ไข

กำหนดค่าเครื่องมือแก้ไข conflicts ด้วยคำสั่ง:

git config --global merge.tool <ชื่อเครื่องมือ>
git config --global mergetool.<ชื่อเครื่องมือ>.path <พาธไปยังเครื่องมือ>

ตัวอย่าง:

git config --global merge.tool meld

6. การป้องกัน Merge Conflicts

  • สื่อสารในทีม: แจ้งให้ทราบเมื่อคุณกำลังแก้ไขไฟล์ที่อาจถูกแก้ไขโดยคนอื่น
  • Pull การเปลี่ยนแปลงล่าสุด: ดึงการเปลี่ยนแปลงจาก branch ปลายทางก่อนเริ่มพัฒนา
  • แบ่งงานให้ชัดเจน: ใช้ branch แยกกันสำหรับฟีเจอร์ต่าง ๆ

สรุป

การจัดการ Merge Conflicts อาจดูยุ่งยากในตอนแรก แต่ด้วยการปฏิบัติตามขั้นตอนและการใช้เครื่องมือช่วยที่เหมาะสม คุณจะสามารถแก้ไข conflicts ได้อย่างรวดเร็วและมีประสิทธิภาพ ซึ่งช่วยให้การพัฒนาร่วมกันในทีมราบรื่นมากขึ้น