04Jul, 2023
Language blog :
Thai
Share blog : 
04 July, 2023
Thai

Guideline for merging : แนวทางการ merge branch บน Github

By

3 mins read
Guideline for merging : แนวทางการ merge branch บน Github

ในการทำงานร่วมกันเป็นทีมบน Project ใน Github นั้น การแตกสาขา(Branch) จากโค้ดหลัก เป็นสิ่งที่ต้องทำ เพื่อที่จะสามารถเพิ่มและแก้ไขโค้ดโดยไม่ให้กระทบกับงานที่คนอื่นทำอยู่ได้ บทความนี้จะเขียนถึงขั้นตอนหลังจากที่เราแก้ไขโค้ดแล้ว ว่าจะนำการเปลี่ยนแปลงที่อยู่ใน Branch แยกของเรา ไป Merge เข้ากับ Branch หลักของ Project อย่างไร ให้ไม่เกิด Conflict กับโค้ดคนอื่นในทีม และสามารถอ่านได้ว่าเราได้ทำการเปลี่ยนแปลงอะไรไปแล้วบ้าง

 

สิ่งที่ควรทำก่อนการ Merge

ก่อนที่เราจะทำการ merge pull request โค้ดของเราใน branch แยก เข้าไปรวมกับ code หลักที่อยู่ใน Main branch แล้วมีสิ่งที่เราควรต้องทำอยู่ 3 อย่าง นั่นคือ

 

1. ก่อนที่จะทำการ merge นั้น เราควรทำการอัพเดทโค้ดของเราให้เป็นปัจจุบันให้เท่ากับ Main branch ก่อนเสมอ เพราะการทำงานเป็นทีมบน github นั้น Main branch มักจะมีการ update อยู่ตลอดเวลา ถ้าหากคนในทีมเราไปแก้โค้ดในไฟล์เดียวกับเรา ก่อนที่เราจะสร้าง pull request เพื่อทำการ merge นั้น github จะแจ้งเตือนว่าเกิดการ Conflict ขึ้น ดังภาพ

conflict file

 

เพื่อที่จะแก้ไข conflict นั้น สามารถทำได้ 2 ทาง คือ

  • Rebase main branch เข้ามาอยู่ใน branch ของเรา การ rebase จะนำ commit (ชุดการเปลี่ยนแปลงโค้ด) ใน main branch ที่ไม่มีใน branch เรามาเรียงก่อนหน้า commit ที่เราทำการเปลี่ยนแปลง

 

  • Merge main branch เข้ามาใน branch ของเรา โดยการ merge จะนำ commit ใน main branch มารวมกับ branch ของเราโดยตรง สร้างเป็น commit ใหม่ข้างหน้า commit ของเราที่ยังไม่ merge เข้าไป 

 

โดยระหว่างการ rebase กับ merge จะสามารถแก้ไข conflict ที่เกิดขึ้นได้ 

  • Rebase กับ merge จะต่างกันที่ rebase จะไม่มี commit ใหม่ขึ้นมาเหมือนกับ merge แต่หลักๆแล้ว ทั้ง 2 อย่างสามารถใช้ได้เหมือนกันทั้งคู่  แต่ต้องจำไว้ว่า การ rebase จะทำให้ branch แตกต่างจากเดิม จึงไม่ควรทำ rebase ใน branch ที่ใช้กันหลายคน และถ้าทำ rebase branch ที่เคย push ขึ้น github ไปแล้ว จะต้องทำการ force push เพื่อ ส่ง branch ใหม่ขึ้นไป

 

2. ใน github project ส่วนใหญ่ผู้ที่ setup project จะมีการตั้ง check actions เอาไว้ ส่วนใหญ่จะเอาไว้ตรวจว่า สไตล์การเขียนโค้ดของเรามีมาตรฐานหรือไม่ หรือโค้ดที่เราแก้ทำให้ automated test ไม่ผ่านรึเปล่า ก่อนที่จะนำโค้ดเข้า main branch หาก มี checks ที่ไม่ผ่าน ต้องเอาโค้ดกลับไปแก้ แล้ว commit ใหม่ จนกว่าจะผ่าน ดังภาพ

check pass



3. ควรที่จะให้คนอื่นในทีมช่วยตรวจดูโค้ดที่กำลังจะนำเข้า main branch เสมอ โดยภายใน github pull request เราจะสามารถเลือกคนที่จะมาตรวจโค้ดเราได้ การที่มีคนช่วยดูโค้ดของเรา จะช่วยลดโอกาสเขียนโค้ดผิดลงได้ และช่วยให้คนในทีมรู้ว่า เรากำลังจะเอาโค้ดอะไรเข้า main branch  หาก ไม่ใช่โค้ดที่ต้องรีบนำเข้า main branch ควรจะรอให้คนตรวจโค้ด Approve งานของเราก่อนที่จะเริ่ม merge โค้ดเข้า main branch ต่อไป

request review

 

หลังจากที่ทำทั้ง 3 ข้อนี้เรียบร้อยแล้ว จึงค่อยเริ่มทำการ Merge เข้า main branch ต่อไป

 

เลือกวิธีการ Merge

 

หลังจากอัพเดทโค้ดเป็นปัจจุบันที่ผ่าน checks ทั้งหมด และ คนในทีม approveโค้ดของเราแล้ว จะสามารถ merge pull request ของเราเข้า main branch ได้ โดยจะมีวิธีการ merge ให้เลือก 3 อย่าง

create merge commit

 

  1. Create merge commit  จะเป็นการเอา commit ทั้งหมดเข้ามาต่อใน main branch และ สร้าง merge commit ขึ้นมา โดย commit ทั้งหมดจะถูกนำเข้า main branch เหมือน branch ที่เราmerge เข้ามา

  2. Squash and merge จะเป็นการมัดรวม commit ทั้งหมดที่เราทำใน branch ของเรา มารวมเป็น commit เดียว แล้วนำเอาเข้า main branch โดยที่เราสามารถใส่รายละเอียดว่า commit ที่เราเอาเข้ามีเนื้อหาอะไรบ้าง

  3. Rebase and merge จะเป็นการ rebase branch ของเราเข้าไปใน main branch การรวมนี้จะไม่เป็นการสร้าง merge commit ใหม่ แต่จะเหมือนเขียน commit ใหม่ขึ้นมาทั้งหมดใน main



ใน 3 ทางเลือกนี้นั้น ปกติในการทำงานเป็นทีมบน github จะเลือกใช้การ create merge commit กับ squash and merge ไม่นิยมใช้การ rebase and merge เพราะจะทำให้ branch main เปลี่ยนไปตลอดทุกครั้งที่ทำการ merge และทำให้คนอื่นในทีมที่แตก branch จาก branch main เก่าต้องทำการแก้ conflict และ force push ตลอดเวลา

 

ซึ่งระหว่าง create merge commit  กับ squash and merge นั้น ก็มีข้อดีข้อเสียต่างกันออกไป

  • Create merge commit  จะนำ commit ย่อยๆที่เราอาจจะต้อง push ขึ้นไปเพื่อแก้ checks error หรือ change request มาเข้า branch main ทั้งหมด คนที่มาดู commit branch main ทีหลังจะดูลำบากว่าเราทำอะไรไปบ้าง ถ้าเราทำ commit ย่อยมากเกินไป

  • Squash and Merge  จะมัดรวม commit ย่อยๆทั้งหมดใน branch มารวมเป็น commit เดียว ซึ่งจะลดปัญหาเรื่องการสร้าง commit ย่อยมากเกินไปได้ แต่จะมีข้อเสียกับ project ที่ต้องเลือกเอา commit ย่อยๆเข้า production บ่อยๆ เพราะ squash จะนำcommit ย่อยๆมารวมกันทั้งหมด ทำให้เลือก commit ย่อยได้ยาก

ดังนั้นในการ merge เข้า branch main เราควรที่จะคุยกับคนอื่นในทีมก่อนว่าจะใช้การ merge แบบใด โดยเน้นการใช้ให้เหมาะสมกับ project ที่ทำอยู่ในปัจจุบัน


ข้อมูลอ้างอิง

เว็บไซต์สำหรับอ่านเพิ่มเติมเรื่อง merge และ rebase
ข้อมูลอ้างอิงเรื่องวิธีการ merge pull request

Written by
Mic
Mic

Subscribe to follow product news, latest in technology, solutions, and updates

- More than 120,000 people/day visit to read our blogs

Other articles for you

25
July, 2024
JS class syntax
25 July, 2024
JS class syntax
เชื่อว่าหลายๆคนที่เขียน javascript กันมา คงต้องเคยสงสัยกันบ้าง ว่า class ที่อยู่ใน js เนี่ย มันคืออะไร แล้วมันมีหน้าที่ต่างกับการประกาศ function อย่างไร? เรามารู้จักกับ class ให้มากขึ้นกันดีกว่า class เปรียบเสมือนกับ blueprint หรือแบบพิมพ์เขียว ที่สามารถนำไปสร้างเป็นสิ่งของ( object ) ตาม blueprint หรือแบบพิมพ์เขียว( class ) นั้นๆได้ โดยภายใน class

By

4 mins read
Thai
25
July, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
25 July, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
ผู้ให้บริการเครือข่ายในสหรัฐฯ ได้เปิดตัว 5G ในหลายรูปแบบ และเช่นเดียวกับผู้ให้บริการเครือข่ายในยุโรปหลายราย แต่… 5G มันคืออะไร และทำไมเราต้องให้ความสนใจ บทความนี้ได้รวบรวม 15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G เพราะเราปฏิเสธไม่ได้เลยว่ามันกำลังจะถูกใช้งานอย่างกว้างขวางขึ้น 1. 5G หรือ Fifth-Generation คือยุคใหม่ของเทคโนโลยีเครือข่ายไร้สายที่จะมาแทนที่ระบบ 4G ที่เราใช้อยู่ในปัจจุบัน ซึ่งมันไม่ได้ถูกจำกัดแค่มือถือเท่านั้น แต่รวมถึงอุปกรณ์ทุกชนิดที่เชื่อมต่ออินเตอร์เน็ตได้ 2. 5G คือการพัฒนา 3 ส่วนที่สำคัญที่จะนำมาสู่การเชื่อมต่ออุปกรณ์ไร้สายต่างๆ ขยายช่องสัญญาณขนาดใหญ่ขึ้นเพื่อเพิ่มความเร็วในการเชื่อมต่อ การตอบสนองที่รวดเร็วขึ้นในระยะเวลาที่น้อยลง ความสามารถในการเชื่อมต่ออุปกรณ์มากกว่า 1 ในเวลาเดียวกัน 3. สัญญาณ 5G นั้นแตกต่างจากระบบ

By

4 mins read
Thai
25
July, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
25 July, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
ในปัจจุบันนี้ ปฏิเสธไม่ได้เลยว่าภาษาที่ถูกใช้ในการเขียนเว็บต่าง ๆ นั้น คงหนีไม่พ้นภาษา Javascript ซึ่งเป็นภาษาที่ถูกนำไปพัฒนาเป็น framework หรือ library ต่าง ๆ มากมาย ผู้พัฒนาหลายคนก็มีรูปแบบการเขียนภาษา Javascript ที่แตกต่างกัน เราเลยมีแนวทางการเขียนที่หลากหลาย มาแบ่งปันเพื่อน ๆ เกี่ยวกับการจัดการ Array ด้วยภาษา Javascript กัน เรามาดูตัวอย่างกันเลยดีกว่า โดยปกติแล้วการ copy ค่าจาก value type ธรรมดา สามารถเขียนได้ดังนี้

By

4 mins read
Thai

Let’s build digital products that are
simply awesome !

We will get back to you within 24 hours!Go to contact us
Please tell us your ideas.
- Senna Labsmake it happy
Contact ball
Contact us bg 2
Contact us bg 4
Contact us bg 1
Ball leftBall rightBall leftBall right
Sennalabs gray logo28/11 Soi Ruamrudee, Lumphini, Pathumwan, Bangkok 10330+66 62 389 4599hello@sennalabs.com© 2022 Senna Labs Co., Ltd.All rights reserved.