โอกาสนี้เราจะมาเรียนรู้การรวม 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 ต่อไป
ไม่มีความคิดเห็น:
แสดงความคิดเห็น