Merge

การแตก 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 เรียบร้อยแล้วถึงจะลบทิ้งได้ครับ

Nattawut Phetmak

Jack of all Trades

blog comments powered by Disqus