Nattawut Phetmak
Jack of all Trades
การแตก branch นั้นช่วยเก็บรักษา code รุ่นที่ยังทำงานถูกต้องไว้ก็จริง แต่มันจะไม่มีประโยชน์เลยถ้าจะแตก branch ต่อไปกันเรื่อยๆ เพราะสุดท้ายเราจะไม่รู้เลยว่า branch ไหนมีความสำคัญอย่างไร code ที่เพิ่มมาใน branch ย่อยๆ เมื่อทดสอบว่าทำงานได้ถูกต้องสมบูรณ์แล้ว ควรถูกย้ายกลับมาอยู่ใน branch master ครับ
ตอนนี้จะเขียนโปรแกรมให้รับ argument เป็นชื่อคนจาก command line แล้วเปลี่ยนไปทักทายคนเหล่านั้นแทน
$ git checkout -b hi-name
Switched to new branch 'hi-name'
สร้าง branch ใหม่เช่นเคย (สังเกตว่าเปลี่ยนไปใช้ checkout -b
ซึ่งเป็นรูปย่อของการสร้าง branch พร้อม checkout) แล้วแก้ไขไฟล์ hello.py
เป็นดังนี้
import sys
names = sys.argv[1:]
if not names:
print('Hello, world!')
for name in names:
print('Hi {}'.format(name))
ทดสอบโปรแกรมกันหน่อย
$ python hello.py
Hello, world!
$ python hello.py Jack Evan Biz
Hi Jack.
Hi Evan.
Hi Biz.
โปรแกรมทำงานได้ตามที่ออกแบบไว้ ก็ได้เวลา commit เข้าระบบ
$ git commit -am 'accept cli args as names'
[hi-name 9824537] accept cli args as names
1 file changed, 10 insertions(+), 1 deletion(-)
เรียบร้อยแล้วสลับกลับมาที่ branch master และสั่ง merge (รวม branch) hi-name กับ master เข้าด้วยกัน
$ git checkout master
Switched to branch 'master'
$ git merge hi-name
Updating b2b0e96..9824537
Fast-forward
hello.py | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
เพียงเท่านี้ที่ branch master ก็จะได้รับ code ที่เพิ่ม feature ใหม่ๆ มาจาก branch ที่แตกไปแล้วครับ
อันที่จริง ถ้าสังเกตดูรายงาน จะเห็นว่าเป็นการ Fast-forward ซึ่งหมายถึงหมายเลข commit ของ branch master ย้ายไปใช้ตัวเดียวกับของ hi-name เท่านั้นเอง ยังไม่ใช่การ merge ที่แท้จริงแต่อย่างใด
และเนื่องจากตอนนี้ branch hi-name ก็ได้ทำหน้าที่ของมันเรียบร้อยแล้ว สั่งลบได้เลยครับ
$ git branch hi-name -d
Deleted branch hi-name (was 9824537).
สังเกตว่าเปลี่ยนไปใช้ -d
(ตัวเล็ก) แทน ซึ่งตัวเลือกนี้จะเช็คดูให้แน่ในก่อนว่า branch นั้นถูก merge เรียบร้อยแล้วถึงจะลบทิ้งได้ครับ