Git คือเครื่องมือที่ช่วยในการทำ Version Control โดยจะช่วยจัดเก็บและควบคุมรายละเอียดของไฟล์ที่ถูกเปลี่ยนแปลง เช่น สร้าง แก้ไข หรือ ลบ ทำให้เราสามารถติดตาม ตรวจสอบและย้อนกลับไปใน Version ต่างๆได้ อีกทั้งยังสามารถตรวจสอบได้ว่าใครเป็นคนแก้ไขเวลาใดวันที่เท่าไหร่อีกด้วย เราอาจจะเคยผ่านการทำงานไฟล์ Word ส่งอาจารย์มาแล้ว ในช่วงแรกๆนั้นก็มีแค่ไฟล์เดียว แต่พอมีการแก้ไขเราก็จะคัดลอกไฟล์เดิมแล้วต่อท้ายด้วย ล่าสุด เมื่อมีการแก้ไขอีกก็จะมี ใหม่ล่าสุด ล่าสุดของล่าสุด ไฟล์สุดท้าย เป็นต้น การที่เราทำแบบนี้คือเราต้องการสร้าง Version ขึ้นมานั้นเองซึ่งในเชิงโปรแกรมนั้นการใช้ Git จะง่ายต่อการจัดการมากกว่า
การทำงานของ Git
Git นั้นจะมีการทำงานหลักอยู่ 3 States ด้วยกันคือ Modified, Staged แล Committed
- Modified คือการแก้ไขใดๆที่ไฟล์ของเราซึ่งยังไม่มีการ Commit ใดๆ
- Staged คือการเตรียมที่จะ Commit ไฟล์ซึ่งจะมีการทำ snapshot ของไฟล์ที่เตรียมจะ Commit
- Committed คือไฟล์ที่ได้อยู่จัดเก็บไปยัง Repository แล้ว
เริ่มแรกนั้นจะต้อง Checkout Project ที่เราต้องการทำงาน ซึ่งไฟล์ Project เหล่านั้นจะถูกดึง(Pull) ลงมาเก็บยังเครื่อง Local ของเรา Stage Fixes นั้นคือเป็นขั้นตอนจัดเก็บไฟล์ที่จะเตรียมสำหรับ Commit ส่วนขั้นตอนสุดท้ายคือ Commit คือจะนำไฟล์ที่อยู่ใน Staged จัดเก็บไว้ใน Git Directory
การทำงานของ Git | ที่มา |
วิธีติดตั้ง Git
ก่อนจะใช้งาน Git เราต้องติดตั้ง Git บนเครื่องเสียก่อนและควรจะเป็น Version ล่าสุดซึ่งสามารถตรวจสอบ Version ล่าสุดได้จาก https://git-scm.com/downloads
คำสั่ง Install สำหรับ Linux Ubuntu
sudo apt install git-all
brew install git
เราสามารถตรวจสอบ Git Version ได้จากคำสั่ง
$ git --version
สำหรับติดตั้งบน Windows สามารถ Download โปรแกรมได้จาก https://git-scm.com/download/win หากต้องการใช้ Git แบบ GUI โดยใช้ซอฟต์แวร์ของ Git เอง สามารถ Download ได้ที่ https://gitforwindows.org/
ตั้งค่าการใช้งาน: เมื่อติดตั้งเสร็จแล้วขั้นตอนนี้เป็นขั้นตอนสำคัญในการติดตั้งเพราะเป็นการระบุตัวตนของผู้ใช้งานเพื่อใช้ในการ Commit
$ git config --global user.name "myname"
$ git config --global user.email myname@mail.com
เริ่มใช้งาน คำสั่ง(Command Line) ของ Git
git init: ก่อนที่จะเริ่มใช้งาน Git นั้นเราจะต้องสร้างไฟล์ .git ขึ้นมาก่อนเพื่อใช้ควบคุมการทำงานของ Project นั้นๆ ก่อนอื่นเราต้องเข้าไปที่ Folder Project ของเราก่อนแล้วทำ git init ไฟล์ .git จะถูกสร้างขึ้นมาแต่เป็น Hidden ไฟล์
$ git init
git clone: เป็นการ Clone Repository ที่มีอยู่มายังเครื่อง Local ของเรา จะใช้ในกรณีที่เราไม่มี Project นั้นมาก่อน โดยทั่วไปแล้วหากเราใช้ Repository GitHub หรือ GitLab แต่เว็บจะมี Link สำหรับ Clone Project อยู่แล้ว เราเพียงแค่ไป Copy Link เหล่านั้นมาแล้วใส่ในคำสั่ง git clone เพียงเท่านี้เราก็จะได้ Project นั้นมาอยู่บนเครื่อง
$ git clone https://yourgit.com
git status: เป็นการตรวจสอบสถานะของ Source Code ซึ่งสามารถดูได้ว่าเราทำงานอยู่ Branch ไหนหรือไฟล์ไหนที่เราได้แก้ไขบ้าง
$ git status
หากไม่มีการ Commit ใดจะมีข้อความขึ้นว่า "nothing to commit, working tree clean" แต่หากไฟล์ถูกเพิ่มหรือแก้ไขจะมีข้อความ "Untracked files" หรือ "modified" แสดง
git add: เป็นคำสั่งที่ใช้ในกรณีที่มีการเพิ่มไฟล์ใหม่หรือมีการเปลี่ยนแปลงของไฟล์เดิม โดยจะพิมพ์คำสั่ง git add แล้วตามด้วยชื่อไฟล์ที่ต้องการเพิ่มหรือเปลี่ยนแปลง เช่น "git add test.js" ในกรณีที่ไฟล์มีการแก้ไขแล้วเรา Run คำสั่ง git add แล้วหากเรา Run git status อีกทีจะพบว่าไฟล์ที่มีการแก้ไขจากสีแดงจะเปลี่ยนเป็นสีเขียว
$ git status
git commit: เป็นการเก็บไฟล์ไว้ใน Staging Area คือจะไฟล์ที่มีการเปลี่ยนแปลงไว้ใน Local Repository ไฟล์ใดๆก็ตามที่เปลี่ยนแปลงหลังจากนี้ที่ยังไม่ได้ทำ git add จะไม่ถูกจัดเก็บ Git สามารถ commit แบบมี comment ได้เพื่อระบุว่า commit นี้เราได้แก้ไขจุดไหนบ้าง
$ git commit
$ git commit -m "message"
git push: ปกติแล้วเวลาเราแก้ไขอะไรก็ตามมันจะถูกแก้ไขที่ Local แต่สุดท้ายแล้วเราจะต้อง Push ไปยัง Remote Repository เพื่อจะได้ Share Source Code ให้คนอื่นๆ ก่อนที่จะ Push ใช้ git status อีกทีเพื่อความแน่ใจว่าไฟล์อยู่ในสถานะพร้อมที่จะ push หรือไม่
$ git push
git pull: คือการดึงไฟล์จาก Remote Repository มายังเครื่อง Local ในการพัฒนาซอฟต์แวร์นั้นไม่ได้มีแต่เราคนเดียวที่แก้ไขไฟล์ อาจจะมีคนอื่นๆแก้ไขด้วย ดังนั้นเราจะต้อง pull ลงมาเพื่อให้มั่นใจว่าเราจะได้ Source Code ใหม่ล่าสุด การ pull นั้น Git จะดึงไฟล์จาก Branch Master ลงมาเสมอ
$ git pull
git log: เป็นการดูประวัติย้อนหลังของไฟล์นั้นๆว่าเราทำอะไรไปบ้าง ใน Git log เรายังสามารถระบุรายละเอียดได้ว่าจะดูข้อมูลเจาะจงแบบไหนเช่น ระบุชื่อคนที่ Commit, ดู Commit ในวันๆนั้น, email คนที่ Commit เป็นต้น
$ git log
ในบางครั้งหากเราใช้คำสั่ง git log เราอาจจะได้ประวัติที่เยอะเกินไปทำให้หายาก เราอาจจะต้องการดูประวัติย้อนหลังแค่ 1 สัปดาห์ซึ่งเราสามารถใช้คำสั่งโดยระบุเวลาเพิ่มลงไปได้ดังตัวอย่าง คำสั่งเกี่ยวกับ Log เพิ่มเติมสามารถดูได้ ที่นี้
$ git log --since=1.weeks
git restore: ในกรณีที่ไฟล์ของเราอยู่ใน Staging Area หรือยังไม่ถูก Push ขึ้นไปยัง Repository หากเราต้องการย้อนกลับสิ่งที่ทำไปทั้งหมดจากปัจจุบัน ย้อนกลับไปยังไฟล์ก่อนหน้า เราสามารถใช้คำสั่ง restore ได้ การใช้คำสั่ง git restore นั้นต้องระวังเป็นพิเศษ เพราะหากใช้แล้วจะทำให้ Source Code ในไฟล์ปัจจุบันที่เรากำลังทำงานอยู่นั้นหายไปเลย และควรมั่นใจก่อนว่าเราจะ restore ถูกไฟล์
$ git restore <file>
git fetch: เป็นการตรวจสอบว่าไฟล์บนเครื่อง Local ของเรากับ Remote Repository มี Source Code ต่างกันหรือไม่
$ git fetch
การสร้าง Branch
ใน Git นั้น Master จะเป็น Branch หลักในงานของเรา แต่ในการทำงานจริงการทำที่ Brahch หลักก็ไม่สะดวกนัก โดยเฉพาะทีมที่มี Developer หลายๆคน เพราะต้องรอให้คนใดคนหนึ่งแก้เสร็จ คนอื่นถึงจะทำงานได้และยังมีโอกาสที่จะเกิด Code Conflict สูงอีกด้วย การสร้าง Brahch เป็นการแยกหรือแตกกิ่งจาก Master แตกมาเป็น Feature ที่เราต้องการแก้ไข เมื่อเราแก้ไขเสร็จก็สามารถ Commit Code กลับไปยัง Master ได้
git branch: เป็นคำสั่งที่ใช้ดูว่าเรามี Branch อะไรบ้างใน Repository ของเรา
$ git branch
git checkout: เป็นคำสั่งที่เลือก Branch ที่เราจะทำงาน
$ git checkout <branch_name>
หากในกรณีที่เราต้องการสร้าง Branch ขึ้นมาใหม่ให้ใช้คำสั่ง
$ git checkout -b <branch_name>
git merge: เป็นการรวมไฟล์จาก Branch ที่เราแยกออกไปรวมเข้ากับ Master
$ git merge