[Tech] How to resolve conflict on main branch

Niti Jaruthanaset
The S (mana)
Published in
2 min readSep 28, 2021

Introduction

เมื่อ Developer พร้อมที่จะเริ่มงาน จะมีการแยก branch ออกจาก main branch ทั้งหมด 3 branch ได้แก่

  1. Main - branch หลักที่คอยเก็บรวบรวม source code ต่างๆ ที่พร้อมใช้งาน ซึ่ง Developer จะไม่ยุ่งกับ branch นี้โดยตรง
  2. Feature - branch หลักที่สำหรับพัฒนา feature ต่างๆ ซึ่งจะแยกออกจาก main branch เมื่อ feature เสร็จสิ้น จะ pull-request กลับไปที่ main branch
  3. Development - branch ที่แยกจาก Feature branch อีกที เอาไว้พัฒนาส่วนต่างๆ ของ feature เมื่อพัฒนาจนเสร็จและพร้อมที่จะประกอบเข้าไปใน feature branc จะ pull-request กลับไปที่ feature branch

Confliction

โอกาศเกิด conflict สามารถมีได้บ่อยครั้งมากในการทำงานจริง โดยปกติเมื่อเกิด conflict ขึ้นภายใน feature ทีมจะสามารถแก้ไขได้หลายวิธี แล้วแต่ที่ทีมจะจัดการหรือตกลงคุยกันไว้

แต่เมื่อ conflict เกิดขึ้นในระหว่าง pull-request feature branchไปยัง main branch ดังรูปนี้

Developer จะต้องแก้ไขโดยใช้วิธีการดังนี้

  1. สร้าง branch ใหม่ที่แยกจาก main branch (ในตัวอย่างจะใช้ชื่อ hotfix)
  2. merge feature branch เข้ามาที่ hotfix branch และแก้ไขให้เรียบร้อย
  3. เมื่อทดสอบแล้วว่าไม่พบปัญหาใดๆ (build & test) หลังจากการแก้ไขเสร็จ ให้ merge hotfix branch เข้ามาที่ feature branch อีกรอบ
  4. pull-request feature branchไปยัง main branch อีกรอบ (ถ้า pull-request ค้างไว้อยู่ ให้ push ขึ้นไปใหม่ได้เลย)

Summary

แม้ว่าการแก้ไข conflict จะสามารถแก้ไขได้หลายวิธี แต่หลักสำคัญก็คือ เราควรจะคุยกับทีมว่าจะมีมาตรการ วิธีแก้ไข conflict อย่างไร แล้วให้ทีมใช้มาตรการเดียวกันทั้งหมด ซึ่งในบทความนี้ คือ ตัวอย่างมาตรการที่ทีมผู้เขียนจะปรับใช้งานกัน

References

[1]: Microsoft Azure. (28/02/2020). Resolve Merge Conflicts in Azure DevOps

http://twocents.nl/?p=2648

--

--