ในการพัฒนาซอฟต์แวร์ร่วมกันในทีม งานจัดการ branch และการ merge เป็นกระบวนการที่หลีกเลี่ยงไม่ได้ การ merge คือการรวมการเปลี่ยนแปลงจาก branch หนึ่งไปยังอีก branch หนึ่ง ซึ่งอาจเปรียบเสมือนการผสมวัตถุดิบสองอย่างให้เป็นเนื้อเดียวกัน อย่างไรก็ตาม การ merge ไม่ได้ราบรื่นเสมอไป บางครั้งอาจเกิดปัญหาและต้องการยกเลิกการ merge ซึ่งบทความนี้จะสอนวิธีจัดการกับสถานการณ์ดังกล่าว
#### ปัญหาที่อาจเกิดขึ้นจากการ Merge
การ merge อาจนำไปสู่ความขัดแย้ง (conflict) ที่ต้องแก้ไขด้วยตนเอง หรือบางครั้งเราอาจ merge โดยที่ยังไม่ได้ตรวจสอบโค้ดอย่างละเอียด แล้วพบปัญหาภายหลัง ซึ่งจำเป็นต้องยกเลิก อย่างไรก็ตาม Git มีเครื่องมือที่ช่วยในการยกเลิกการ merge ที่มีปัญหาได้อย่างมีประสิทธิภาพ
#### การยกเลิกการ Merge ด้วย `git reset` และ `git revert`
มีสองวิธีหลักๆ ในการยกเลิกการ merge นั่นคือ `git reset` และ `git revert` ซึ่งทั้งสองวิธีนี้มีการใช้งานและผลลัพธ์ที่แตกต่างกัน
1. Git Reset`git reset` ใช้ในการยกเลิกการ commit ที่มีปัญหา และอาจทำให้การเปลี่ยนแปลงทั้งหมดที่อยู่ใน commit หายไป จริงๆ แล้วมันคือการย้อนสถานะของ branch กลับไปยังจุดก่อนหน้า
git reset --hard HEAD~1
คำสั่งนี้จะทำให้ branch กลับไปยังสถานะก่อนการ merge ล่าสุด ระวัง! การใช้ `--hard` จะลบการเปลี่ยนแปลงใดๆ ที่ยังไม่ได้ commit ใน working directory ด้วย
2. Git Revertหากทีมงานคนอื่นเริ่มใช้งาน commit ของคุณแล้ว ตัวเลือกที่ดีกว่าคือ `git revert` เนื่องจากมันสร้าง commit ใหม่ที่ "ย้อนกลับ" การเปลี่ยนแปลงใน commit ก่อนหน้า โดยไม่ส่งผลกระทบต่อ history ของ branch
git revert -m 1 <merge_commit_hash>
คำสั่งนี้จะสร้าง commit ใหม่ที่ยกเลิกผลของการ merge ก่อนหน้านี้ โดยที่ `-m 1` ระบุว่าให้ยกเลิกการเปลี่ยนแปลงจาก parent branch ในกรณีที่มี branch หลายสายให้คิดว่า parent ที่เป็น base ของ merge เดิมคือที่ 1
#### ตัวอย่างการใช้งาน
สมมติว่ามี branch ชื่อ `feature-xyz` ที่ถูก merge เข้ากับ `main` แต่พบปัญหาหลังการ merge อาจแก้ไขด้วย `git reset` หรือ `git revert` ขึ้นอยู่กับสถานการณ์และความร่วมมือในทีม
1. ตรวจสอบ commit log ด้วย `git log` เพื่อหาหมายเลข commit ที่ต้องยกเลิก
2. ใช้คำสั่ง `git revert` เพื่อสร้าง commit แก้ไข
git log --oneline
สมมติเราพบว่า merge commit มี hash คือ `abc123`
git revert -m 1 abc123
หลังจากทำการ revert คุณสามารถตรวจสอบสถานะการ merge และ commit ใหม่ได้ เพื่อให้มั่นใจว่าการ revert เป็นไปตามที่ต้องการ การ revert ด้วยวิธีนี้จะช่วยรักษาประวัติการทำงานของโปรเจคไว้อย่างละเอียดและมีระเบียบ
#### สรุป
การจัดการ branch และการ merge เป็นกระบวนการที่สำคัญในงานพัฒนาซอฟต์แวร์ การเรียนรู้วิธีจัดการเมื่อเกิดปัญหาหลังการ merge จะช่วยให้การทำงานร่วมกันมีประสิทธิภาพมากขึ้น การใช้ Git ก็เหมือนการใช้เครื่องมือทำครัว ที่ช่วยให้การปรุงอาหารเป็นเรื่องง่ายและน่าตื่นเต้น หากคุณสนใจเรียนรู้เพิ่มเติมเกี่ยวกับ Git หรือการพัฒนาซอฟต์แวร์ ศึกษาด้วยตัวเองหรือลองมาค้นพบความสนุกในการเขียนโปรแกรมที่โรงเรียน EPT ที่มีหลักสูตรสำหรับทุกท่าน ไม่ว่าจะเป็นมือใหม่หรือผู้อยู่ในสายงานนี้ เพื่อต่อยอดความรู้และสร้างผลงานที่คุณภูมิใจ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM