[How to] วิธีการตั้งค่า Git บังคับไม่ให้ Merge Branch แบบ Fast-Forward

ในการ Merge Branch บน Git นั้น หาก Commit สุดท้ายของ Branch ปลายทาง เป็น Commit เดียวกับจุดที่แยก Branch ออกมา การ Merge จะได้ผลเป็นแบบ Fast-forward

Git-Logo-2Color

ประโยคด้านบนนี้ ถ้าใครไม่เข้าใจ แนะนำให้อ่านบทความตอน [Dev] ใช้ Git เพื่อชีวิต (Source Code) ที่ดีกว่า – การใช้งาน Git GUI เบื้องต้น ก่อนนะครับ ซึ่งจะอยู่ในหัวข้อของ Branch นั่นเอง

ลองดูรูปต่อไปนี้ จะเห็นว่า Branch master ยังอยู่ที่ Commit แรก ส่วน Branch test นั้น อยู่ที่ Commit ที่ใหม่กว่า master ไป 2 Commits

ก่อน Merge Branch
ก่อน Merge Branch

หากทำการ Merge Branch test ไปยัง master จะเป็นการ Merge แบบ Fast-forward จะเห็นว่า Branch master ไปอยู่ที่ Commit เดียวกับ Branch test และสายของ Commit เป็นเส้นตรง!!

หลัง Merge Branch (แบบ Fast-forward)
หลัง Merge Branch (แบบ Fast-forward)

เมื่อเป็นการ Merge แบบ Fast-forward สายของ Commit เป็นเส้นตรง สวยงาม ก็จริง แต่นั่นทำให้เราดูไม่ออกว่า Branch test นั้น แยกออกและรวมกลับ ที่จุดไหน~!!

กรณีแบบนี้ เราสามารถสั่ง Merge แบบไม่เอา Fast-forward ได้ด้วยคำสั่งดังนี้

ถ้าเราไม่ต้องการมาเขียน Command แบบนี้ทุกครั้งที่จะ Merge กรณีไม่ต้องการให้เกิด Fast-forward เราสามารถกำหนดไปยัง Config ได้เลย…

โดยหากต้องการกำหนดให้กับทุก Repo สามารถกำหนดไปที่ Global config ด้วยคำสั่งดังนี้

แต่หากต้องการกำหนดให้กับบาง Repo ก็กำหนดไปที่ Local config ด้วยคำสั่งดังนี้

หลังจากนั้น ก็สามารถสั่ง Merge แบบไม่เอา Fast-forward ได้ตลอดไปแล้ว

หลัง Merge Branch (กรณีบังคับไม่ให้ Merge แบบ Fast-forward)
หลัง Merge Branch (กรณีบังคับไม่ให้ Merge แบบ Fast-forward)

จากรูปด้านบน จะเห็นว่า เมื่อ Merge Branch test ไปยัง master จะเกิดเป็น Commit ใหม่แล้ว ทำให้เราสามารถเห็น ทางเข้า-ทางออก ของ Branch test ได้อย่างชัดเจน

เย่~!! ไม่ต้องจำ Command แล้ววววววว~!!

Leave a Reply

Your email address will not be published.

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.