ในการ Merge Branch บน Git นั้น หาก Commit สุดท้ายของ Branch ปลายทาง เป็น Commit เดียวกับจุดที่แยก Branch ออกมา การ Merge จะได้ผลเป็นแบบ Fast-forward
ประโยคด้านบนนี้ ถ้าใครไม่เข้าใจ แนะนำให้อ่านบทความตอน [Dev] ใช้ Git เพื่อชีวิต (Source Code) ที่ดีกว่า – การใช้งาน Git GUI เบื้องต้น ก่อนนะครับ ซึ่งจะอยู่ในหัวข้อของ Branch นั่นเอง
ลองดูรูปต่อไปนี้ จะเห็นว่า Branch master ยังอยู่ที่ Commit แรก ส่วน Branch test นั้น อยู่ที่ Commit ที่ใหม่กว่า master ไป 2 Commits

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

เมื่อเป็นการ Merge แบบ Fast-forward สายของ Commit เป็นเส้นตรง สวยงาม ก็จริง แต่นั่นทำให้เราดูไม่ออกว่า Branch test นั้น แยกออกและรวมกลับ ที่จุดไหน~!!
กรณีแบบนี้ เราสามารถสั่ง Merge แบบไม่เอา Fast-forward ได้ด้วยคำสั่งดังนี้
1 |
git merge --no-ff test |
ถ้าเราไม่ต้องการมาเขียน Command แบบนี้ทุกครั้งที่จะ Merge กรณีไม่ต้องการให้เกิด Fast-forward เราสามารถกำหนดไปยัง Config ได้เลย…
โดยหากต้องการกำหนดให้กับทุก Repo สามารถกำหนดไปที่ Global config ด้วยคำสั่งดังนี้
1 |
git config --global merge.ff no |
แต่หากต้องการกำหนดให้กับบาง Repo ก็กำหนดไปที่ Local config ด้วยคำสั่งดังนี้
1 |
git config --local merge.ff no |
หลังจากนั้น ก็สามารถสั่ง Merge แบบไม่เอา Fast-forward ได้ตลอดไปแล้ว

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