Nattawut Phetmak
Jack of all Trades
จุดแข็งที่ทำให้เราต้องใช้โปรแกรมจำพวก SCM คือความสามารถในการกู้คืนความเสียหายให้กลับมาเป็นเหมือนเดิม
การแตก branch ก็เป็นหนึ่งในจุดแข็งนี้ คอนเซ็ปง่ายๆ ของมันคือทำสำเนาไฟล์ทั้งหมด แล้วก็ทำงานในไฟล์ที่สำเนามานั่นเอง ถ้าแก้ไขต่อเติมไฟล์แล้วผลลัพท์ออกมาไม่ดี ก็สามารถลบ branch นั้นๆ ทิ้งได้โดยไม่กระทบกับโปรเจคหลัก
ลองแตก branch จากโปรเจค hello โดยให้ชื่อว่า polyglot สามารถสั่งได้ดังนี้
$ git branch polyglot
และดู branch ที่มีด้วย
$ git branch
* master
polyglot
จะเห็นว่ามี branch master กับ polyglot โดยตอนนี้อยู่ที่ branch master ซึ่งเป็น branch หลักที่ Git สร้างไว้ให้ โดย branch นี้ควรจะเก็บโปรเจคช่วงที่ stable เอาไว้ครับ
ตอนนีเรารู้แล้วว่าต้องการทำงานที่ branch polyglot ก็สามารถสลับ branch ไปได้โดยสั่ง
$ git checkout polyglot
Switched to branch 'polyglot'
จะทดลองลองเขียนโปรแกรมแบบรองรับหลายภาษา โดยแก้ไขไฟล์ hello.py
กันนิดหน่อย ให้เป็นดังนี้
#include<stdio.h>
#define print(x) using namespace std; /*
#*/ int main(void){return printf(x"\n");}
print("Hello, world!")
เรียบร้อยแล้วคอมไพล์เป็น C++ และทดสอบการทำงานทั้ง 2 ภาษาดู
$ cc -x c++ hello.py
$ ./a.out
Hello, world!
$ python hello.py
Hello, world!
ทำงานได้ผ่านเรียบร้อยก็เตรียมตัว commit code ซึ่งถ้าลองตรวจสถานะโปรเจคดู จะพบว่ามีไฟล์ a.out
ซึ่งจะไม่ถูกจำเข้าระบบด้วย
$ git status
# On branch polyglot
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: hello.py
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# a.out
no changes added to commit (use "git add" and/or "git commit -a")
เนื่องจากไฟล์ a.out
เกิดจากการคอมไพล์ไฟล์ hello.py
และยังไม่มีความจำเป็นต้องใช้ในเวลานี้ เราอาจสั่งให้ Git ลบไฟล์ทั้งหมดที่ไม่รู้จักโดย
$ git clean -f
Removing a.out
ถึงตรงนี้ ก็พร้อม commit แล้ว ซึ่งถ้าไม่อยากเสียเวลาไล่สั่ง add ไฟล์ที่แก้ไข สามารถใส่ -a
เพื่อบอกให้ add ไฟล์เหล่านั้นแบบอัตโนมัติได้ครับ
$ git commit -am 'polyglot code work in c++'
[polyglot 7741c77] polyglot code work in c++
1 file changed, 3 insertions(+)
แต่เนื่องจาก branch polyglot นี้ มันค่อนข้างพัฒนาโปรแกรมต่อได้ยาก เราจะลบ branch นี้ทิ้งไปครับ โดยก่อนอื่นต้องเปลี่ยนไปอยู่ branch master ก่อน แล้วสั่งลบด้วยคำสั่งนี้
$ git checkout master
Switched to branch 'master'
$ git branch polyglot -D
Deleted branch polyglot (was 7741c77).