git-logo
พอดีพี่ @paiboon15721 สอบถามเกี่ยวกับการใช้คำสั่ง git
ระหว่าง merge กับ rebase ว่ามันแตกต่างกันอย่างไร
เนื่องจากการใช้งานพื้นฐานผลที่ได้เหมือนกันเลย
ซึ่งผมขอเอามาอธิบาย เพื่อให้เห็นภาพตรงนี้ก็แล้วกัน

ก่อนอื่นมาทำความเข้าใจระหว่าง merge กับ rebase

ตัวแรกคือ merge ใช้สำหรับการรวมสายการพัฒนาต่างๆ เข้าด้วยกัน
โดยยังคงรักษาประวัติต่างๆ ของแต่ละสายการพัฒนาไว้

ส่วนการ rebase จะใช้การตัดแต่งประวัติต่างๆ การพัฒนา
เพื่อจุดประสงค์ เพื่อทำให้สามารถตัดแต่งการพัฒนาได้

สามารถแสดงด้วยรูป เพื่อแยกความแตกต่างได้ดังรูป

mergerebase

นำรูปมาจาก http://blog.sourcetreeapp.com/2012/08/21/merge-or-rebase/

แต่การใช้งาน merge จริงๆ ผ่าน $git merge มันจะแสดงผลเหมือนกับการ rebase
ดังนั้น ถ้าต้องการให้เห็นความแตกต่างจะต้องใส่ parameter —no-ff เข้าไป

ต่อมาดูว่า ข้อดีและข้อเสียของ merge และ rebase กันบ้าง

การ Merge
ข้อดี ประกอบไปด้วย

  • การ merge มันเข้าใจง่าย
  • เป็นการดูแลรักษาประวัติของการพัฒนาของ branch หลักของการพัฒนา
  • ทำให้เห็นประวัติต่างๆ ในการพัฒนา
  • ประวัติต่างๆ ของการพัฒนา หรือ commit จะไม่ถูกแก้ไข

ข้อเสีย ประกอบไปด้วย

  • เนื่องจากการ merge มันถูกสร้างขึ้นมาเพื่อรวมการทำงานของทีมบน branch เดียวกัน ดังนั้นคุณไม่สามารถแก้ไขอะไรได้มากนัก

การ Rebase
ข้อดี ประกอบไปด้วย

  • สามารถแก้ไขประวัติการพัฒนาได้ จะลบ ยุบรวม ก็ได้

ข้อเสีย ประกอบไปด้วย

  • มีแนวคิด และการใช้งานที่ซับซ้อน
  • มักจะทำให้เกิดความขัดแย้ง หรือ conflict กับทีมพัฒนา เนื่องจากไปทำการแก้ไขประวัติ

หลังจากที่ทำการรู้แล้วว่า merge กับ rebase แล้ว

น่าจะพอทำให้เห็นว่า แต่ละตัวถูกสร้างขึ้นมา เพื่ออะไร
มีข้อดีและข้อเสียอย่างไร
ดังนั้น สิ่งที่ต้องตอบให้ได้ก่อนว่า เรากำลังจะทำอะไร
จึงจะทำให้เราเลือกใช้งานได้อย่างถูกต้องและเหมาะสม

Reference Website
http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging
http://blog.sourcetreeapp.com/2012/08/21/merge-or-rebase/
http://blogs.atlassian.com/2013/10/git-team-workflows-merge-or-rebase/

Tags: