
วิธีแก้ปัญหา Git Conflict
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Git Conflict คืออะไร
Git Conflict คือการเกิดปัญหาการชนกันของข้อมูลในไฟล์งานที่ทำร่วมกันกับเพื่อนของเรา ซึ่งในช่วงที่เรากำลังพัฒนาโปรแกรมหรือเขียนโค้ดกับเพื่อนร่วมงานอยู่นั้น เราไม่สามารถรู้ได้เลยว่าเพื่อนเราจะเขียนโค้ดไปในรูปแบบไหน แล้วเวลาที่เราและเพื่อนของเราเขียนโค้ดเสร็จ ก็ต้องทำการ push ไฟล์เข้าไปยัง Repository เพื่อบันทึกข้อมูลแบบถาวร และในตอนนี้เองจึงทำให้เกิดปัญหา Conflict ตามมา
การเกิดปัญหา Conflict
ปัญหา Conflict จะเกิดขึ้นก็ต่อเมื่อเราและเพื่อนร่วมงานได้ทำการสร้าง Branch ขึ้นมาเพื่อพัฒนาโปรเจกต์เดียวกัน แต่มีเหตุที่ต้องทำให้แก้ไขโค้ดในไฟล์งานเดียวกันและในตำแหน่งเดียวกันกับของเรา ต่อมาเมื่อเราและเพื่อนร่วมงานได้ทำการ push ไฟล์ที่แก้ไขขึ้นไปใน Repository จากนั้นถ้ามี Branch ของคนใดคนนึงได้ถูก merge เข้าไปใน Repository แล้ว Branch ของอีกฝ่ายที่ยังไม่ได้ทำการ merge จะขึ้น Conflict ทันที เพราะเวลาที่ไฟล์มารวมกันแล้ว Github จะตรวจพบว่าข้อมูลไฟล์ที่อยู่ใน Repository นั้นมีข้อมูลที่ขัดแย้งกันอยู่ใน Branch ของเรา
ตัวอย่างการเกิด Conflict
<<<<<<< HEADคือจุดเริ่มต้นของ Conflict=======คือเส้นแบ่งระหว่างการเปลี่ยนแปลงจาก branch หลักกับ branch ของเรา>>>>>>> Branch_Nameคือจุดสิ้นสุดของ Conflict
จะแสดงดังนี้

การแก้ปัญหา Conflict
1. ให้ run command ตามโค้ด ด้านล่างนี้
git checkout develop git pull git checkout Branch_Name git merge develop
2. เปิดโปรแกรม Visual Studio Code ที่ใช้เขียนโค้ดขึ้นมา แล้วจะเห็นการเกิด Conflict ที่แสดงอยู่ในส่วนของไฟล์ที่แก้ไขโค้ดกับเพื่อน หลังจากนั้นก็ต้องมาคุยกันเพื่อตัดสินใจว่าจะใช้โค้ดของใคร หรือจะรวมโค้ดเข้าด้วยกันดีเพื่อที่จะไม่ให้เกิดปัญหา Conflictในครั้งต่อไป เพราะ GitHub ไม่รู้ว่าโค้ดไหนถูกต้องที่สุด หลังจากตัดสินใจได้แล้วก็ทำการแก้โค้ดให้ถูกต้อง

3. ใช้คำสั่ง tig ในการ add commit push ไฟล์เข้าไปใหม่ แล้วไปเช็คที่ Repository เพียงเท่านี้เราก็สามารถแก้ปัญหา Conflict ได้และสามารถ Merge pull request ได้แล้ว ดูตัวอย่างรูปภาพด้านล่างได้เลยครับ

สุดท้ายนี้ เพื่อลดความเสี่ยงในการ merge แล้วเกิด conflict จำเป็นต้องพูดคุยกับเพื่อนที่ทำโปรเจกต์ด้วยกัน ตกลงกันให้ดี และต้อง pull บ่อยๆ เพื่อให้ไฟล์งานเป็นปัจจุบันด้วยนะครับ







