วันศุกร์ที่ 8 กันยายน พ.ศ. 2560

Basic Git part 8

Git Merge

โอกาสนี้เราจะมาเรียนรู้การรวม branch ที่แตกย่อยออกมานี้เข้าด้วยกัน สายการพัฒนาจะได้รวมมาบรรจบกัน

ครับ ในเรื่องนี้เขามีตัวอย่างให้ สมมติงานของเรา life ไปแล้ว คือไปอยู่บน production เรียบร้อย ปรากฏว่าเกิดปัญหาขึ้นมา ซึ่งจะต้องรีบแก้ไขโดยด่วน (hotfix) มีขั้นตอนดังต่อไปนี้

1. ตรงไปยัง production branch
2. สร้าง branch ใหม่ขึ้นมาชื่อ hotfix
3. จัดการปัญหา เมื่อทดสอบแล้วมันโอเค ก็ merge มันเข้ากับ branch หลักเสีย
4. switch กลับไปยัง original branch แล้วทำงานต่อไป

แต่อันที่จริงแล้วเรามักจะมี staging layer อยู่ (อันนี้ไม่เกี่ยวกับ git staging area นะ) หมายความว่ามีการ clone โปรเจ็กต์ที่อยู่ในสภาพแวดล้อมของ production layer อยู่แล้ว ผิดก็แต่ข้อมูลมันเป็นข้อมูลทดสอบ มิได้เป็นข้อมูลจริงอย่าง production layer ไม่ เราก็ควรไปทำที่ชั้น staging layer นี้แล้วค่อยจัดการ upgrade ให้เป็นของที่แก้ไขเรียบร้อยแล้วสำหรับ production layer ต่อไป

อันนี้เป็นโจทย์ที่ดีนะครับ น่าจะได้ลองกันทุกคน เพื่อความเข้าใจ

https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging

เราจะมาเริ่มต้นกันใหม่เพื่อทำโจทย์นี้ มีเวลาก็เอาไลน์ยิงขึ้น notebook หรือ PC แล้วจึงทำเองอ่านเองก่อน (แค่หน้าเดียว) ติดไหนค่อยกลับมาอ่านในไลน์นะครับ

เคร เรามาเริ่มต้นทุกอย่างใหม่ ผมตั้งชื่อ working directory นี้ว่า my_project_2


จากนั้นสร้างไฟล์หนึ่งขึ้นมาชื่อว่า index.html


เสก git ให้รู้จักมัน ก็จะมี git reporitory หรือว่าถึง หรือว่า repo (อันเดียวกัน) เกิดขึ้น


โยนไฟล์นี้เข้าไปใน staging area แล้วก็ commit ซะ


ได้เป็น committed แรก จากนั้นลองเปิด source tree ดู


แก้ไขและ commit อีกสองครั้ง ให้ได้ตามภาพต่อไปนี้


แก้ไขและ commit เป็นครั้งที่ สอง




แก้ไขและ commit เป็นครั้งที่ สาม




ตรวจสอบด้วย git log


สมมติว่าเกิด issue เกิดขึ้น ขอเรียกว่า iss53 ก็จะขอแยก branch ใหม่ให้ชื่อว่า iss53 พิมพ์

git branch iss53 เพื่อสร้าง branch ใหม่
git checkout iss53 เพื่อย้าย header pointer หรือก็คือการ switch branch



จะเข้าภาพนี้ตามโจทย์ที่ให้ไป


แก้ไขไฟล์ index.html เพิ่มอีกครั้ง สมมติว่าเป็นการ fix issue นี้



save ไฟล์ index.html แล้ว commit



จะได้รูปตามหนังสือ


ทำไปถึงจุดนี้ สมมติว่าเกิดปัญหาขึ้น ซึ่งต้องเร่งแก้ไข (สมมติ) ซึ่งเป็นอีกปัญหาหนึ่งที่มาจาก master branch ดังนั้นเราจะ switch กลับไปที่ master branch ก่อนแล้วค่อยสร้าง branch ใหม่ขึ้นมาอีก สมมติให้ชื่อว่า hotfix ก็แล้วกัน



ตอนนี้เราอยู่ที่ hotfix branch แล้ว ต่อไปเราจะแก้ไข index.html เพิ่มอีกเล็กน้อยแล้ว commit เข้ามา ก็จะกลายเป็นรูปนี้





สมมติว่าตอนนี้เราได้แก้ไขปัญหาเริ่งด่วนนี้เรียบร้อย เราก็จะ merge หรือก็คือการรวม branches เข้าด้วยกัน ในที่นี้เราพอใจที่จะรวม master branch เข้ากับ hotfix branch ครับ คือต้องการให้กลายเป็นรูปนี้


1. ตอนนี้เราอยู่ที่ hotfix branch นะครับ ให้เรากลับไปยัง master branch ก่อน

git checkout master

2. จากนั้นเราจึงบอกกับ header ว่า (มันชี้ที่ master branch) จับ hotfix มารวมซะ

git merge hotfix



การ merge นี้หมายความว่า เราจะยืนบน branch (master) ที่มี version น้อยกว่า branch ที่เราสนใจ (hotfix) จากนั้นย้าย master pointer ไปชี้ที่เดียวกับ branch ที่เราสนใจชี้อยู่นั่นแหละครับ

ให้เพื่อนๆสังเกตคำที่มันเขียนว่า fast-forward ที่ปรากฏขึ้นใน command prompt นะครับ คำนี้หมายความว่า git แค่ย้าย pointer ไปชี้ยัง branch เป้าหมายเท่านั้น คือทำง่ายๆไม่มีอะไรซับซ้อน

พอเป็นแบบนี้ตอนนี้เท่ากับว่า master กับ hotfix branches นั้นชี้ commited จุดเดียวกัน เราก็จัดการลบ hotfix ทิ้งเสีย เพราะหมดประโยชน์แล้ว

git branch -d hotfix




เอาล่ะ เสร็จกิจเร่งแล้ว เราจะกลับไปทำงานต่อที่ iss53 branch แต่เอาไว้ part ต่อไป

ไม่มีความคิดเห็น:

แสดงความคิดเห็น