วิธีแก้ปัญหา Git Conflict

ในปัจจุบันนี้ GitHub เป็นเครื่องมือที่นักพัฒนานิยมใช้ เพราะว่าสามารถสร้างโปรเจกต์ทำงานเป็นทีมและรับส่งไฟล์งานผ่าน GitHub ได้ตามต้องการ ช่วยเพิ่มความสะดวกสบาย อย่างไรก็ดี การใช้งาน GitHub ก็ยังมีปัญหาที่ต้องเจอบ่อยๆ เช่น การเกิด Git Conflict หรือการชนกันของไฟล์ และในบล็อกนี้ผมจะมาแชร์ประสบการณ์การแก้ไขปัญหา Git Conflict ในเหตุการณ์ที่ผมได้เจอมาให้กับเพื่อนๆ ครับ ก่อนอื่นเรามาทำความรู้จักกับ git add, git commit, git push กันสักหน่อยนะครับ git add คือการเพิ่มไฟล์, git commit คือการคอมเม้นต์หรือใส่รายละเอียดสิ่งที่เราได้ทำการแก้ไขไป, git push คือการอัปโหลดไฟล์

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 บ่อยๆ เพื่อให้ไฟล์งานเป็นปัจจุบันด้วยนะครับ