การใช้ git พื้นฐานสำหรับผู้เริ่มต้น
สวัสดีครับ ผู้อ่านทุกท่าน ผมกาญจน์ครับ วันนี้ผมจะพูดเรื่องเกี่ยวกับเครื่องมือหากินตัวหนึ่งที่ Software Developer ในปัจจุบันหลายคนรู้จักกันดี คือ git ครับ
สำหรับคนที่เพิ่งเริ่มมาเขียนโปรแกรมหรือเปลี่ยนสายมาแบบผมช่วงแรกๆ ก็จะงงพอสมควรว่า git นี้คืออะไร? และใช้ทำอะไรกันแน่?
Git คืออะไร?
ถ้าเอานิยามทางการจากเว็บทางการของ git https://git-scm.com/
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
หรือแปลได้ว่า "Git เป็นระบบการจัดการเวอร์ชันที่เสรีและโอเพนซอร์ส ที่ถูกออกแบบให้จัดการกับทุกอย่างไม่ว่าจะเป็นโปรเจกต์ขนาดเล็กไปจนถึงใหญ่ ได้อย่างรวดเร็วและมีประสิทธิภาพ"
อ่านแล้วอาจจะงงๆนิดหนึ่ง แต่ลองนึกภาพตามนะครับ สมัยก่อนที่ยังไม่มีระบบ Git เพื่อจัดการเวอร์ชัน เวลาเราจะทำการเปลี่ยนแปลงไฟล์แต่ละครั้ง เราต้องBackup ไฟล์เอง แล้วสมมุติไฟล์ปัจจุบันเกิดพังขึ้นมา เราก็ต้องไปนั่งไล่หาไฟล์เก่าๆ แล้วไปไล่เปิดไฟล์เก่าว่าแก้ไขอะไรบ้างแล้ว และยิ่งถ้าตั้งชื่อตามใจเช่น untitled01, untitled02, งานเร่งabc,... หรือเก็บไฟล์แบ็กอัปไม่เป็นระเบียบด้วย คงได้เขวี้ยงคอมพิวเตอร์ทิ้งแน่ๆเลยครับ
แต่เมื่อมี git การจัดระเบียบเวอร์ชันก็ง่ายขึ้น
- จะแบ่งเวอร์ชันก็ทำง่าย
- กรณีเวอร์ชันปัจจุบันพัง ก็สามารถย้อนเวอร์ชันได้ง่าย
- สามารถเก็บใน Remote repository เช่น Github, GitLab, Bitbucket. ฯลฯ ได้
- ช่วยให้การทำงานร่วมกันในทีม (เช่นงาน Software development) ราบลื่นขึ้น
ข้อดีมากขนาดนี้ เรามาติดตั้ง Git แล้วมาลองใช้กันเถอะครับ
ติดตั้ง Git
- ไปที่เว็บ https://git-scm.com/downloads แล้วกดดาวน์โหลดตาม OS ของคอมพิวเตอร์เราได้เลยครับ
อย่างกรณีผมใช้ Windows 64 Bit ก็คลิกที่ Windows --> Git for Windows/x64 SetUp
- พอ Install เสร็จแล้วกด Finish ได้เลยครับ
- ให้เปิด terminal ขึ้นมาครับ เราจะเช็คว่า git ถูกติดตั้งเรียบร้อยหรือยัง ให้พิมพ์คำสั่งตามนี้ครับ
git -v
ถ้ามีเวอร์ชันขึ้นมาแสดงว่าติดตั้งสมบูรณ์ครับ เวอร์ชันที่ได้อาจจะไม่เหมือนกันกลับที่แสดงอยู่ในบทความ แต่ไม่เป็นปัญหาครับ
การใช้งาน Git
การใช้งาน Git (local)
เมื่อเราเข้าใจแล้วเกี่ยวกับประโยชน์ของ Branch ใน Git เราจะมาลองใช้งาน Git กันเพื่อเก็บ Version ต่างๆ, การแตก Branch หรือการ push เข้าไปบน Remote repository บน GitHub กันนะครับ
ผมจะสาธิตการใช้งาน Git ผ่าน Bash ใน VsCode นะครับ แต่ผู้อ่านสามารถใช้ IDE กับ Terminal ที่สะดวกได้เลยครับ
ใครที่ยังไม่มี IDE สามารถดาวน์โหลด VsCode ได้ตามลิงค์ที่อยู่ข้างล่างนี้ได้เลยครับ
- เปิด VSCode ขึ้นมา แล้วไปที่ File --> Open --> แล้วเลือก Folder Project ที่ทำอยู่นะครับ
จะเห็นว่าข้างล่างมี Terminal (Bash) โดย path จะเป็นตามโฟลเดอร์ที่เปิดขึ้นมา (ถ้า Terminal ไม่แสดง ให้กด Ctl + J ที่คีย์บอร์ดเพื่อแสดง terminal)
- รันคำสั่งนี้ เพื่อเริ่มใช้งาน Git
git init
สามารถไปดูที่โฟลเดอร์ของโปรเจกต์เรา จะเห็นโฟลเดอร์ .git ถูกสร้างขึ้นมาเรียบร้อย

- เราจะทำการ Commit เพื่อสร้าง Version แรกใน Git ของโปรเจกต์เรา ลองสร้างไฟล์อะไรก็ได้ตามใจ แล้วรันคำสั่งนี้เพื่อเอาไฟล์ในโปรเจกต์ที่เปลี่ยนแปลงทั้งหมดขึ้น Stage
git add .
- Commit เพื่อ save เป็นเวอร์ชัน --- สำหรับการ commit ครั้งแรกนิยมตั้งชื่อ "initial commit" เป็นต้น หรือจะตั้งชื่อ "first commit" ก็ได้เหมือนกันครับ
git commit -m 'initial commit'
- สำหรับการบันทึกเวอร์ชันครั้งต่อๆไป สามารถใส่คำสั่งตามนี้ได้เลยครับ
# นำไฟล์ที่มีการเปลี่ยนแปลงทั้งหมดขึ้น stage
git add .
# Commit เป็นเวอร์ชันใหม่
git commit -m '<ข้อความ Commit>'
Note: ข้อความ Commit แนะนำให้พิมพ์ข้อความที่กระชับและชัดเจน เวลาต้องการย้อนเวอร์ชัน เราจะได้รู้ว่าเวอร์ชันนี้เปลี่ยนแปลงอะไรไปบ้าง
อธิบาย stage และ commit
- Commit เป็นการบันทึกไฟล์ที่มีการเปลี่ยนแปลง หรือ ไฟล์ใหม่ที่เพิ่มเข้ามาเป็นเวอร์ชันต่างๆ แต่ก่อนจะ commit เราต้อง add ไฟล์ที่มีการเปลี่ยนแปลงหรือสร้างใหม่เหล่านั้นขึ้น stage ก่อน จากนั้นถึงจะ Commit ได้
ในภาพตัวอย่างข้างล่าง จะเป็นคำสั่งเอาขึ้น/เอาลง จาก stage (โดย . นั้นหมายถึง "ทุกไฟล์")
ส่วนคำสั่งนี้จะนำทุกไฟล์ออกจาก stage (ตรงข้ามกับ git add .)
git restore --stage .
เราสามารถตรวจสอบสถานะว่าไฟล์ของเราอยู่บน Stage แล้วหรือยังด้วยคำสั่ง
git status
a. ในตัวอย่างนี้ ผมได้ทำการ initial commit ไปแล้ว
- main.go เป็นไฟล์เดิมตอน initial commit หลังจากนั้นผมได้ทำการเปลี่ยนแปลงไฟล์
- new_folder/new.go เป็นไฟล์ใหม่ที่สร้างขึ้นมา หลังจาก initial commit
b. ใช้คำสั่งนี้เพื่อตรวจสอบสถานะของไฟล์
git status
จะแสดงชื่อไฟล์ขึ้นมา
- สีแดง คือยังไม่ได้ add ขึ้นไปบน stage
c. ให้ทำการ add ขึ้น stage และเช็คสถานะ พอขึ้นสีเขียว แสดงไฟล์เหล่านั้นอยู่บน stage พร้อมที่จะ Commit ได้ครับ
# เอาขึ้น Stage
git add .
# ตรวจสอบสถานะ
git status
Note: นอกจากการใช้คำสั่ง git แล้ว ใน git เวอร์ชันใหม่ๆยังมี tig ซึ่งเป็น text mode editor ที่ช่วยให้เราสามารถ add ขึ้น stage หรือ commit ได้สะดวกขึ้นด้วย โดยสามารถดูวิธีการได้จากบทความนี้ครับ
การใช้งาน Remote Repository (Github)
การใช้งาน Git มักจะมาคู่กับ Remote Repository อย่าง GitHub เอาไว้ push code ของเราขึ้นไปเก็บได้
ข้อดีของการมี remote repository นอกจะช่วยแบ็กอัปไฟล์โค้ดของเรา กรณีไฟล์งานในเครื่องคอมพิวเตอร์ได้รับความเสียหายแล้ว ยังช่วยจัดการโปรเจกต์ที่มีคนทำงานร่วมกันหลายคนเป็นระเบียบและมีประสิทธิภาพอีกด้วย
Remote Repository มีหลายตัวให้เลือกใช้ ไม่ว่าจะเป็น GitHub, GitLab, Bitbucket เป็นต้น ซึ่งในบทความนี้จะใช้ GitHub ซึ่งเป็น git repository ที่ถูกใช้กันแพร่หลายมากที่สุดตัวหนึ่งครับ
1. สร้าง Remote Git Repository + นำ Local Git ขึ้น Remote Repository
- ไปลงทะเบียน GitHub ได้ตามลิงค์นี้ครับ https://github.com/
โดยใครที่มีอีเมล์ของ Google อยู่แล้ว ก็สามารถใช้อีเมล์ Google ลงทะเบียนได้เลยครับ
- พอสมัคร GitHub เรียบร้อยจะได้ GitHub หน้าตาประมาณนี้ครับ ให้คลิกที่รูปโปรไฟล์ขวาบนครับ
- จากนั้นคลิกที่ Your Repositories ซึ่งจะพาไปหน้าที่รวบรวม Repositories ของโปรเจกต์เราทั้งหมด
- กด New เพื่อสร้าง Repository ใหม่
- แล้วตั้งชื่อ Repository name ครับ (แนะนำให้ตั้งชื่อเหมือน โฟลเดอร์ของโปรเจกต์ในเครื่องเรา จะได้ไม่สับสนนะครับ) เสร็จแล้วกด Create repository ที่ขวาล่างได้เลยครับ
- ก็จะได้ Remote Repository มาเรียบร้อยแล้วครับ แล้ว GitHub ยังใส่คำสั่งสำหรับ push git local ของเราขึ้น remote repository มาให้ด้วย
Note: README.md เป็นไฟล์สำหรับ อธิบายโปรเจกต์ของเรา, วิธีการ Setup, และวิธีการใช้งาน เป็นต้น ซึ่งมีประโยชน์มากเวลาจะให้คนรับงานไปทำต่อเข้าใจถึงจุดประสงค์ แต่ในตัวอย่างนี้จะพูดถึงการนำ git local ขึ้น github เป็นหลักเลยอาจจะไม่ได้ใส่นะครับ
- รันคำสั่งตามนี้เลย ใครที่ทำตาม "การใช้งาน Git (Local)" ไปแล้ว ข้อ 1. ข้ามไปได้เลยนะครับ
# 1. เริ่ม initiate Git
git init
git add .
git commit -m "first commit"
# 2. เอาขึ้น remote repository
git branch -m main
git remote add origin <path ของ repository>
git push -u origin main
อธิบายเพิ่มเติม
- git remote add origin <path ของ repository>: เชื่อม git local บนเครื่องของเรากับ remote repository
- git push -u origin main: เพื่อ push branch ใหม่ (main) ขึ้นไปบน GitHub
- ถ้าสามารถ push ขึ้นไปได้เรียบร้อย จะเห็นไฟล์ที่เรา commit ไปมาแสดงใน Repository ประมาณนี้ครับ
- ต่อไปเวลาเรา commit project เราสามารถรันคำสั่งนี้ เพื่อ push ขึ้นไปใน GitHub ได้ครับ
git push
2. pull Git ลงมาจาก GitHub
ในกรณีที่เราทำโปรเจกต์ต่อจากคนอื่น หรือต้องการทำโปรเจกต์ของเราต่อ (เช่นกรณีไฟล์ที่เราทำงานไว้ในคอมพิวเตอร์พัง) เราสามารถทำได้ตามขั้นตอนนี้ครับ
- เข้าไปที่ project repo ขอเราครับ ถ้าเกิดผู้อ่านเปิดขึ้นมาใหม่แล้วหาไม่เจอ ให้คลิกที่รูป ขวาบนสุด แล้วกด Your repositories
- แล้วกดเข้าไปใน project ที่ต้องการได้เลยนะครับ
- พอเข้ามาใน repo ของโปรเจกต์เราแล้ว ให้คลิกที่ Code --> คลิกที่ปุ่ม Copy to Clipboard เพื่อ copy path ของ repo
ผมจะสร้างโฟลเดอร์มาเพื่อเก็บโปรเจกต์ที่จะโคลนมานะครับ
(ในตัวอย่างผมสร้าง project-clone ใน desktop แต่ผู้อ่านจะสร้างที่ไหนก็ได้นะครับ)
- เปิด VsCode แล้วกด file -- open folder --- เลือกโฟลเดอร์ ที่เราต้องการ clone โปรเจกต์เข้ามาใส่
- ให้รัน Command
git clone <path repo ที่เรา copy มา>
- จากนั้นที่มุมซ้ายจะเห็นว่า project จาก remote repository ถูก clone ลงมาแล้วครับ
Git Branch
ประโยชน์ของ Git นอกจากช่วยให้การควบคุมเวอร์ชันง่ายแล้ว ยังช่วยให้การ ทำงานเป็นทีม ง่ายขึ้นด้วยครับ
ถ้าเราทำงานคนเดียว การแตก Branch อาจไม่สำคัญเท่ากับตอนทำงานเป็นทีม เพราะเราทำเองแก้เองคนเดียว
แต่พอต้องทำงานตั้งแต่ 2 คนขึ้นไป สมัยก่อนที่จะมี git และ GitHub (Remote Repository) เวลาโปรแกรมเมอร์ 2 ขึ้นไปจะทำงานด้วยกัน จะต้องใช้ FlashDrive เอาไฟล์ไปทำต่อ แล้วพอทำเสร็จก็ต้องเอาไฟล์มารวมกัน ทำให้เกิดความยุ่งยากดังนี้
- หาคอมพิวเตอร์กลาง สำหรับรวมไฟล์ Code
- ต้องมาไล่เช็คว่า แต่ละคน แก้ไขอะไรไปบ้าง และมี Code ส่วนไหนขัดกันบ้าง (Conflict) ซึ่งถ้าโปรเจกต์ยิ่งใหญ่ การมานั่งไล่เช็ค/จำแต่ละที่ จะมีความยุ่งยากมากมาย
Git branch จึงมาแก้ปัญหาส่วนนี้
- Developer สามารถแตก branch ออกมาจากตัวหลักไปทำงานได้ ใครทำเสร็จก่อนก็เอา merge บนเว็บอย่าง GitHub ได้
- ไม่ต้องมาเซฟใส่ Flashdrive แล้วมารวมโค้ดแบบ manual ที่คอมพิวเตอร์เครื่องใดเครื่องหนึ่ง
การตั้งชื่อ branch
-
ชื่อข้างล่างเป็นวิธี Conventional ที่นิยมใช้กันในการตั้งชื่อ แต่ไม่ได้เป็นกฎเกณฑ์ตายตัว
-
Master: เป็น default branch ใน git และเป็น branch หลัก
-
Main: ปัจจุบันคนนิยมเปลี่ยนมาใช้ Main เป็น branch หลักแทน (เพราะบางคนมองว่า Master สื่อถึงความหมาย master-slave) และใน GitHub ซึ่งเป็น Remote Repository ก็เปลี่ยนมาใช้ Main เป็นค่า default branch แทน Master
-
Develop: บางโปรเจกต์ก็อาจแตก branch ออกจาก Main เพื่อไว้สำหรับการทำงาน Development แล้ว merge feature ต่างๆ เข้าด้วยกันที่ branch นี้ก่อน ซึ่งอาจจะต้องเช็คความเสถียรก่อน merge เข้า Main อีกที
Note: ซึ่งปัจจุบัน GitHub จะตั้งค่าให้ main เป็น Branch หลักแทน master แล้ว เดี๋ยวนี้ developer จึงนิยมเปลี่ยนชื่อจาก master เป็น main ครับ
- ส่วน Branch อื่นๆก็แตกออกมาทำงานได้จาก branch หลัก ซึ่งบางบริษัทจะแตก branch ตามโปรแกรมเมอร์ที่รับผิดชอบ, บางที่ก็แตกตาม feature, hotfix, etc. ตัวอย่าง
- feature/shopping-card
- feature/login
- bugfix/popup

ภาพด้านบน: ภาพตัวอย่างการแตก Branch และ merge Branch เข้ามา
Note: ในกรณีทำงานเป็นทีม ปรึกษาและกำหนดรูปแบบการตั้งชื่อ Branch ในทีมก่อนจะช่วยให้ชื่อ Branch เป็นระเบียบและเข้าใจง่ายครับ
1. การแตก branch
- เราสามารถเช็คได้ว่า project ที่เราอยู่มี branch อะไรบ้างด้วยคำสั่งนี้
git branch
ในภาพนี้ โปรเจกต์ที่ผม clone ลงมามี branch เดียวคือ branch main
และใน path ของ git ในวงเล็บสีฟ้า คือ branch ที่เราอยู่ คือ main

- ใช้คำสั่งนี้เพื่อสร้าง branch
git branch <ชื่อ branch>
แล้วเวลาจะย้าย branch สามารถใช้คำสั่ง
git checkout <branch ที่จะย้าย>
Note: ถ้าอยากทั้งสร้าง และย้าย branch ทีเดียว เราสามารถใช้คำสั่งนี้ได้ครับ
git checkout -b <ชื่อ branch ใหม่>
ในภาพตัวอย่างนี้ ผมใช้คำสั่งเพื่อสร้าง branch ใหม่ชื่อ feature/cart-checkout แล้วย้ายไป branch ดังกล่าว

branch ปัจจุบันของเราจะแสดงในวงเล็บ หรือจะไฮไลท์เป็นสีเขียวตอนรันนำสั่ง git branch ตามในรูปครับ
2. การ Merge Branch และกรณีเกิด Conflict
ปกติหลังจากที่เราทำงานเสร็จ แล้วจะ Merge เข้า branch หลัก (main) ใน GitHub จะมีขั้นตอนดังนี้ครับ
Pull Request และ Merge Branch ของเราเข้า Main ใน GitHub
- หลังจาก Push การเปลี่ยนแปลงขึ้นไปใหม่แล้วยังไม่ได้สร้าง pull request จะมีปุ่มสีเขียว "Compare & Pull request" แสดงขึ้นมา ให้กดเข้าไปได้เลยครับ
แต่ในกรณีปุ่มดังกล่าวไม่แสดงขึ้นมา สามารถคลิกที่ "Pull requests" ที่ด้านซ้ายบน แล้วคลิกไปที่ "New pull request" ได้เช่นกันครับ
- กรณีไม่มี Conflict จะมีปุ่ม "Merge pull request" แสดงขึ้นมา ถ้าในทีมไม่ต้องการให้แก้ไขอะไรเพิ่มเติม สามารถกดเพื่อ Merge เข้า Branch หลักได้เลยครับ
แต่ถ้ามี Conflict เกิดขึ้นมา จะหน้าตาแบบในภาพครับ เราจำเป็นจะต้องแก้ Conflict ก่อนถึงจะสามารถ Merge ได้

โดยเราสามารถคลิกไปที่ "Resolve conflicts" เพื่อแก้ Conflict โดยตรงตรงเลยก็ได้ครับ แต่ผมรู้สึกว่าใช้วิธีแก้ Conflict ใน Git Local ของเราจะสะดวกกว่า เพราะ IDE อย่าง VsCode จะมีเครื่องมือช่วยแก้ Conflict ที่ง่ายกว่า
สามารถอ่านเกี่ยวกับ Git Conflict ได้ที่ลิงค์นี้ครับ
แก้ Conflict ใน vscode
- ในตัวอย่างนี้ ผมจะให้ branch หลักที่เราจะ merge เป็น main นะครับ อย่างแรกให้เราไปที่ branch main แล้ว pull code ล่าสุดลงมาก่อน
git checkout main
git pull
Note: ปกติถ้าเกิดเราได้ทำการเปลี่ยนแปลงในไฟล์ แล้วยังไม่ได้ commit (แล้วเกิด Conflict) ตัว Git จะไม่ยอมย้าย branch เพราะฉะนั้นต้อง Commit ไฟล์ก่อนครับ
- จากนั้นให้ย้ายกลับไปที่ branch ของเราที่มี conflict อีกครั้ง
git checkout <branch ที่มี conflict>
- จากนั้น Merge main เข้ามาใน branch ของเรา
git merge main
- ไฟล์ที่มี Conflict จะกลายเป็นสีแดง เมื่อกดเข้าไป จะเห็นบรรทัดที่มี Conflict หน้าตาประมาณนี้ครับ
เราสามารถแก้ไข Conflict ในนี้เลย หรือคลิกที่ "Resolve in Merge Editor" ซึ่งจะแบ่งเป็น 2 จอให้เปรียบเทียบง่ายขึ้น
คำอธิบาย:
- Current Change: การเปลี่ยนแปลงที่เราได้ทำไว้
- Incoming Change: การเปลี่ยนแปลงจาก Main ที่เรา merge เข้ามา
เราสามารถเลือกว่าจะเก็บ Code ส่วนไหนบ้าง
- Accept Current Change: เก็บเฉพาะ Code ของเรา
- Accept Current Change: เก็บเฉพาะ Code ที่มาจาก main
- Accept Current Change: เก็บ Code ทั้งคู่
- เมื่อแก้ไข Conflict ทั้งหมดเรียบร้อยแล้ว เราจะสามารถ Commit และ Push ขึ้นไปบน GitHub ได้
บน GitHub จะแสดงให้เห็นว่าไม่มี Conflict สามารถกด Merge ได้ครับ
ปิดท้าย
Git นอกจากเป็นเครื่องมือที่ทำให้ developer สามารถทำงานร่วมกันได้อย่างมีประสิทธิภาพแล้ว ยังเป็นเสมือนตัวเก็บเวอร์ชันต่างๆของไฟล์งานเรา เพื่อให้ย้อนกลับไปเวลาไฟล์ปัจจุบันพังเกินกว่าจะแก้ได้อีกด้วยครับ
Git ยังมีคำสั่งอื่นๆอีกมากเลยในการทำงาน ซึ่งสามารถดู Tutorial เพิ่มเติมได้ที่เอกสารทางการของ Git https://git-scm.com/docs/gittutorial ได้เลยครับ
หวังว่าบทความนี้จะช่วยให้ผู้อ่านที่เริ่มต้นทำงาน software development นำไปทำงานได้ราบรื่นขึ้นนะครับ แล้วเจอกันใหม่บทความหน้า สวัสดีครับ


































