Coding Gun

git command เบื้องต้นที่มือใหม่ต้องรู้

สิ่งที่จำเป็นในการทำงานกับ Git ไม่ว่าจะเป็นการทำงานแบบ Command Line ด้วย Git bash หรือผ่านทาง GUI อย่าง Source Tree เราจำเป็นต้องเข้าใจการทำงานของ Git ก่อน ใครที่ยังไม่ค่อยเข้าใจการทำงานของ Git แนะนำให้อ่านบทความ การใช้งาน Git เบื้องต้น ก่อน ซึ่งในบทความนี้เราจะเน้นที่การใช้งาน Git command เป็นหลัก

การทำงานกับ git เริ่มต้นได้จาก 2 กรณีด้วยกันคือ

  1. เริ่มต้นเขียน code ใหม่ตั้งแต่ต้น เริ่มต้นสร้าง project ใหม่ตั้งแต่ต้น
  2. นำ code ที่มีอยู่แล้วเข้ามาใน repository นำ Code มาจาก repository ที่มีอยู่แล้ว

เริ่มต้นเขียน Code ใหม่ตั้งแต่ต้น

การทำงานกับ git แบบเริ่มต้นเขียน Code ใหม่ตั้งแต่ตั้น

  1. เริ่มต้นหลังจากที่เรามี source code เราจะเริ่มต้นทำงานด้วยคำสั่งแรกคือ
git init

คำสั่งนี้จะเป็นการสร้าง folder ที่ชื่อว่า .git ให้เรา ซึ่งถ้าเราทำการลบ folder นี้จะทำให้ไฟล์ทุกไฟล์ของเรากลับสู่สถานะ untracked ทั้งหมดเท่ากับเป็นการเริ่มต้นใหม่

  1. เนื่องจากการทำงานของ 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 ที่เราใส่เข้าไปนี้

  1. หลังจากนั้นให้ทำการ Add file เข้าไปใน local repository(บนเครื่อง client) ด้วยคำสั่ง
git add .

โดยถ้าเป็นครั้งแรกเราสามารถใช้เครื่องหมาย “.” เพื่อบอก git ให้ add ไฟล์ทั้งหมดทุกไฟล์ใน folder ปัจจุบันเข้าไปใน repository ให้หมด

หลังจากนี้ถ้าจะใช้ git add . ต้องแน่ใจว่ามีไฟล์อะไรบ้างที่อยุ่ใน status modified

  1. เมื่อทำการ add file เข้ามาใน index(ถูก track การเปลี่ยนแปลงโดย git แล้ว) ก็ให้ทำการ commit เข้าไปใน local repository ด้วยคำสั่ง
git commit -m "ส่วนใหญ่ครั้่งแรกเราจะใช้ initial commit หรือ first commit"
  1. สร้าง branch ใหม่ใน local repository ด้วยคำสั่ง
git branch -M [ชื่อ branch]

ในขั้นตอนต่อไปเราต้องใส่ชื่อ branch เข้าไปด้วย ดังนั้นเราควรจะสร้าง branch ใหม่ขึ้นมาบน remote repository ด้วย ส่วน parameter -M ที่ใส่เข้าไปจะเท่ากับการใส่ parameters 2 ตัวนี้

ไม่ควรทำงานบน main brach หรือ master branch

  1. ทำการส่งการเปลี่ยนแปลงนี้ขึ้นไปไว้บน 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

Git checkout

ในส่วนของชื่อไฟล์ เราจะต้องระวังเรื่องของตัวอักษรตัวใหญ่หรือตัวเล็กด้วย

และถ้าเราต้องการจะเอา 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 กันให้บ่อยขึ้น

อ่านต่อเพิ่มเติมได้ที่

Phanupong Permpimol
Follow me