git command เบื้องต้นที่มือใหม่ต้องรู้
สิ่งที่จำเป็นในการทำงานกับ Git ไม่ว่าจะเป็นการทำงานแบบ Command Line ด้วย Git bash หรือผ่านทาง GUI อย่าง Source Tree เราจำเป็นต้องเข้าใจการทำงานของ Git ก่อน ใครที่ยังไม่ค่อยเข้าใจการทำงานของ Git แนะนำให้อ่านบทความ การใช้งาน Git เบื้องต้น ก่อน ซึ่งในบทความนี้เราจะเน้นที่การใช้งาน Git command เป็นหลัก
การทำงานกับ git เริ่มต้นได้จาก 2 กรณีด้วยกันคือ
- เริ่มต้นเขียน code ใหม่ตั้งแต่ต้น เริ่มต้นสร้าง project ใหม่ตั้งแต่ต้น
- นำ code ที่มีอยู่แล้วเข้ามาใน repository นำ Code มาจาก repository ที่มีอยู่แล้ว
เริ่มต้นเขียน Code ใหม่ตั้งแต่ต้น
การทำงานกับ git แบบเริ่มต้นเขียน Code ใหม่ตั้งแต่ตั้น
- เริ่มต้นหลังจากที่เรามี source code เราจะเริ่มต้นทำงานด้วยคำสั่งแรกคือ
git init
คำสั่งนี้จะเป็นการสร้าง folder ที่ชื่อว่า .git ให้เรา ซึ่งถ้าเราทำการลบ folder นี้จะทำให้ไฟล์ทุกไฟล์ของเรากลับสู่สถานะ untracked ทั้งหมดเท่ากับเป็นการเริ่มต้นใหม่
- เนื่องจากการทำงานของ git เป็น distributed version control เลยทำให้มี 2 repository คือ local(อยู่ในเครื่องตัวเอง) และ remote(เครื่องที่เป็น server) เราต้องทำการระบุ remote repository เพื่อให้ git รู้ว่าเราจะเอา source code ไปเก็บไว้ที่ไหน(ถ้าทำงานคนเดียวก็ไม่ต้อง) โดยใช้คำสั่ง
git remote add origin [url ของ git repository]
เราจะต้อง copy url มาใส่ใน command นี้ โดยเราจะได้ url มาหลังจากที่เราสร้าง project หรือสร้าง repository ใหม่ ตัวอย่างเช่น
git remote add origin https://github.com/irobust/coddinggun.git
หลังจากนี้ถ้าใช้่คำว่า origin ในคำสั่งของ git จะหมายถึง url ของ git repository ที่เราใส่เข้าไปนี้
- หลังจากนั้นให้ทำการ Add file เข้าไปใน local repository(บนเครื่อง client) ด้วยคำสั่ง
git add .
โดยถ้าเป็นครั้งแรกเราสามารถใช้เครื่องหมาย “.” เพื่อบอก git ให้ add ไฟล์ทั้งหมดทุกไฟล์ใน folder ปัจจุบันเข้าไปใน repository ให้หมด
หลังจากนี้ถ้าจะใช้ git add . ต้องแน่ใจว่ามีไฟล์อะไรบ้างที่อยุ่ใน status modified
- เมื่อทำการ add file เข้ามาใน index(ถูก track การเปลี่ยนแปลงโดย git แล้ว) ก็ให้ทำการ commit เข้าไปใน local repository ด้วยคำสั่ง
git commit -m "ส่วนใหญ่ครั้่งแรกเราจะใช้ initial commit หรือ first commit"
- สร้าง branch ใหม่ใน local repository ด้วยคำสั่ง
git branch -M [ชื่อ branch]
ในขั้นตอนต่อไปเราต้องใส่ชื่อ branch เข้าไปด้วย ดังนั้นเราควรจะสร้าง branch ใหม่ขึ้นมาบน remote repository ด้วย ส่วน parameter -M ที่ใส่เข้าไปจะเท่ากับการใส่ parameters 2 ตัวนี้
- —move ทำการเปลี่ยนชื่อ branch ปัจจุบันไปเป็นชื่อใหม่ที่เราสร้างขึ้น
- —force จะบังคับให้เปลี่ยนเป็นชื่อ brach ตามที่เราตั้งถึงแม้ว่าจะมี branch นั้นอยู่แล้ว
ไม่ควรทำงานบน main brach หรือ master branch
- ทำการส่งการเปลี่ยนแปลงนี้ขึ้นไปไว้บน server หรือ remote repository ด้วยคำสั่ง
git push -u origin [ชื่อ branch ที่สร้างไว้ในขั้นตอนก่อนหน้า]
การเปลี่ยนแปลงนี้จะถูกส่งขึ้นไปบน remote repository ที่เรากำหนดไว้ในขั้นตอนที่ 2 ส่วน parameter -u จะเป็นการเชื่อมโยง local brach(ฝั่ง client) กับ remote branch(ฝั่ง server) หลังจากนี้เราพิมพิ์แค่ git push git จะรู้ทันทีเลยว่า จะต้องเอา code ขึ้นไปที่ branch ไหน
การทำงานกับ git แบบเริ่มต้นจาก Code ที่อยู่ใน repository อยู่แล้ว
การทำงานในลักษณะนี้จะต้องทำการดึง Code ที่อยู่บน Server(remote repository) มาไว้ในเครื่องของเรา ซึ่ง Git Server หรือ remote repository นั้นจะเป็นการใช้บริการแบบฟรีๆ จาก Github, Bitbucket หรืออาจเป็นการติดตั้ง git server บนเครื่อง Server ใน network ของเราเองด้วย Gitlab ก็ได้ ลองดูทางเลือกใช้งาน Git server ได้ที่นี่
การทำงานจะเริ่มต้นจากการดึง code ลงมาจาก remote repositoryด้วยคำสั่ง
git clone [url ของ git repository]
เมื่อทำการ clone ลงมาจาก server แล้วเราก็สามารถทำงานกับไฟล์ใน folder นี้ได้เหมือนกับที่เราสร้าง Code ขึ้นมาใหม่ตั้งแต่ต้น
หลังจากนั้นให้ทำการตรวจสอบว่าไฟล์ของเราได้เข้าไปอยู่ใน repository แล้วรึยัง ให้ใช้คำสั่ง
git status
เราจะเห็นได้ว่าไฟล์ไหน commited แล้วถ้ายังมีไฟล์ไหนอยู่ในส่วนของ untracking file แสดงว่าไฟล์นั้นยังไม่ถูก add เข้าไปใน repository
Command ที่ต้องใช้ในชีวิตประจำวัน
ในหัวข้อนี้เราจะแนะนำ command ต่างๆที่จำเป็นต้องใช้ในชีวิตประจำวัน หลังจากเรานำ code ขึ้น remote repository หรือดึง code ลงมาจาก remote repository แล้ว ซึ่งถือว่าเป็นกลุ่มของ command ที่ใช้งานกันบ่อยที่สุด
เมื่อมีการเปลี่ยนแปลง source code แล้ว สถานะของ file จะเป็น modified(ดูได้จากคำสั่ง git status) เราจะต้องทำการ add เข้าไปใน index ก่อนด้วยคำสั่ง
การนำไฟล์เข้าไปใน index จะเป็นการเปลี่ยน status เป็น staged
git add README.md # add ทีละไฟล์
git add section* # add ไฟล์หรือ folder ที่ชึ้นต้นด้วยคำว่า section
git add . # add ทุกไฟล์ที่อยู่ใน status modified เข้าไปใน index
commit เข้าไปใน repository ในเครื่องของเราก่อน โดยใช้คำสั่ง
git commit -m "ข้อความที่อธิบายการเปลี่ยนแปลงใน commit นี้"
ในคำสั่ง commit จะต้องทำการใส่ parameter “-m” เข้าไปด้วย เพื่อให้เวลากลับมาค้นหา revision หรือการเปลี่ยนแปลงต่างๆ จะได้แยกออกว่า สิ่งที่เรา commit เข้าไปเป็นการแก้ไขปัญหา หรือ เพิ่ม code ส่วนไหนเข้าไป
ถ้าเราต้องการให้ code ที่เราแก้ไขหรือเพิ่มเติมเข้าไป อยู่ใน commit เดิม เราจะใช้
git commit --amend # ถ้าไม่ใส่ -m git ถามว่าเราจะใช้ message เดิมหรือเขียนมหท่
git commit --amend -m "เปลี่ยนแปลงคำอธิบายใหม่"
git commit --amend --no-edit # ระบุไปเลยว่าใช้ message เดิม ไม่เปลี่ยนแปลง
git commit --amend -C [commit hash] # ระบุว่าจะใช้ message ของ commit ไหน
หลังจากที่เราทำการ commit แล้วการเปลี่ยนแปลงของ source code จะเป็นแค่การเปลี่ยนแปลงของ repository ในเครื่องของเรา เท่านั้น ถ้าเราต้องการเอา code ขึ้นไป update บน server จะต้องใช้คำสั่ง
git push origin [ชื่อ branch]
git push -u origin [ชื่อ branch] # ครั้งหน้าจะได้พิมพิ์แค่ git push เฉยๆ
ในกรณีที่เราต้องกาารที่จะถอยหลังกลับไปยัง version ที่อยู่ใน local repository เราจะใช้คำสั่ง
git checkout [ชื่อไฟล์] # ดึงเอา Code ที่อยู่ใน local repository มาไว้ใน Working directory
ในส่วนของชื่อไฟล์ เราจะต้องระวังเรื่องของตัวอักษรตัวใหญ่หรือตัวเล็กด้วย
และถ้าเราต้องการจะเอา Code ล่าสุดบน Server ลงมา update ในเครื่องของเราจะใช้คำสั่ง
git pull origin
ในกรณีที่ทำงานหลายคนอาจเกิด Confilct แล้วต้องการบังคับให้ update source code บน Server เป็น source code ของเราให้ใช้คำสั่ง
git push -f
การใช้ git push -f อาจทำให้ Code ของคนอื่นหายได้
วิธีการแก้ Conflict ที่ถูกต้องคือ pull ลงมา แล้วทำการตรวจสอบ Conflict และหลังจากนั้นค่อย push ขึ้นไปใหม่
ถ้าในทีมมีปัญหาเกิด Conflict บ่อยแสดงว่าเรามีการ push และ pull น้อยเกิดไปให้ทำการรวม Code กันให้บ่อยขึ้น