ถ้าใครทำงานสาย tech ต้องคุยกับทีม software development บ่อยๆ น่าจะเคยได้ยินคำว่า git ผ่านหูกันมาบ้าง ของดีที่สร้างโดย Linus Torvalds ในปี 2005

บทความนี้แอดมาอธิบายว่า git คืออะไร เหมือนหรือต่างอะไรกับ GitHub และสอนใช้ 10 คำสั่ง git commands พื้นฐานที่เราควรรู้จัก

What is Git

Linus Torvalds ผู้สร้าง git ในปี 2005 ตำนานของโลก software development
Linus Torvalds ผู้สร้าง git กราบ

Git คือ software ที่เหล่านักพัฒนาซอฟต์แวร์ใช้ทำ version control

อธิบายภาษามนุษย์ง่ายๆคือการ save snapshot ของ code ที่เราเขียนเป็นระยะๆ (track) เหมือนเรามีปุ่ม undo เพื่อย้อนเวลากลับไปหา code “version” ต่างๆได้

Git is a version control system. Imagine it like a time machine for your project files!

Concept สำคัญของ git คือ

  • Repository เรียกสั้นๆว่า “repo” คือกล่องที่เราใช้เก็บ files ต่างๆ โดย git จะบันทึกการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นในกล่องนั้น i.e. folder
  • Commit คือ snapshot ของงานที่เราทำ ณ เวลานั้นๆ เหมือนกดปุ่ม save
  • Branch คือการเพิ่มสาขา เหมือนเปิด franchise 555+ ให้เราลองเขียนโค้ด สร้างฟีเจอร์ใหม่นอกเหนือจาก main branch
  • Merge คือการรวม code จากหลายๆ branches เข้าด้วยกัน

เหตุผลที่ทำให้ git เป็นที่นิยมทั่วโลกภายในเวลาสั้นๆ คือ [1] Linus Torvalds คนสร้าง git คือตัวพ่อระดับตำนาน 555+ และ [2] git เป็น open-source ใช้งานได้ฟรี เย้

🚀 ขอบคุณ Gemini สำหรับข้อมูล git history คร้าบ 555+ เดี๋ยวนี้แอดใช้ Gemini ช่วยทำ research หาข้อมูล เขียนบทความสะดวกมาก ของแทร่

Git vs. GitHub

GitHub คือบริการของ Microsoft สำหรับฝาก remote repo และทำงานเป็นทีม
GitHub คือบริการของ Microsoft สำหรับฝาก remote repo และทำงานเป็นทีม

แล้ว git กับ GitHub เหมือนกันไหมแอด?

อธิบายแบบสั้นๆ (อีกแล้ว 555+) git คือ version control software

ส่วน GitHub คือ hosting service สำหรับฝาก git repositories แอดมอง GitHub เหมือน Google Drive สำหรับ developers เลย

แทนที่เราจะสร้าง repo ในคอมพิวเตอร์เราแบบ local เราสามารถสมัคร free account บน GitHub แล้วสร้าง cloud-based repo ได้สบายๆ

ทีม dev สามารถเข้าถึง GitHub repo จากที่ไหนก็ได้ในโลกนี้แค่มีอินเตอร์เน็ต มีประโยชน์มากๆสำหรับโปรเจ็คที่ต้องทำงานกันหลายคน

พวกเรา WFH (work from home) ได้เพราะมี GitHub เลย ยั๊งงง 555+

ตัวเลือกอื่นๆนอกจาก GitHub เช่น GitLab, Bitbucket และ Gitea เป็นต้น

Basic Command Line

พื้นฐานสำคัญที่ควรรู้ ก่อนเริ่มใช้ git คือ command line

สามคำสั่งที่แอดใช้ในบทความนี้คือ

  • mkdir : make directory สร้าง directory ใหม่
  • cd : change directory ย้ายไปอยู่ใน directory นั้นๆ
  • pwd : print working directory เรียกดู directory ที่เรากำลังทำงานอยู่

มาลองสร้าง new directory ชื่อ “workspace” ด้วยสามคำสั่งนี้

mkdir workspace
cd workspace
pwd

Command line พื้นฐานอื่นๆที่เราควรรู้จัก เช่น ls touch echo head tail cat grep เป็นต้น

✅ บทความนี้เวลาแอดพูดถึง directory ความหมายเดียวกันกับ folder นะครับ ถ้าใครใช้ windows อยากลองทำตาม tutorial นี้ ดาวน์โหลด git ได้ฟรีที่เว็บไซต์ gitscm

Git version

มาเริ่มกันแบบง่ายๆก่อน คำสั่งแรกคือ git –version เพื่อดูว่าคอมพิวเตอร์ที่เราใช้อยู่มี git ติดตั้งแล้วหรือเปล่า และใช้เวอร์ชันอะไร

git --version

📝 ตัว –version เหมือนเป็น option ที่เราเขียนต่อจากคำสั่ง git นั้นๆ

หน้าตาผลลัพธ์จะประมาณนี้ ของแอดเป็นเวอร์ชัน 2.46.0 (พ.ย. 2024)

ตรวจสอบเวอร์ชันของ git
git –version

Git init

พอเข้าไปอยู่ใน workspace แล้ว ใช้คำสั่ง git init เพื่อเปลี่ยนโฟลเดอร์นั้นเป็น git repo รันปุ๊ป เสร็จปั๊ป git ทำงานได้เร็วมากๆ กราบ อ. Linus มา ณ ที่นี่ 555+

git init
git init สร้างโปรเจ็ค git
git init สร้างโปรเจ็ค git

Git status

ลองสร้าง text file ง่ายๆสักสองสามอัน เช่น hello.py, data.csv, model.txt ใส่ลงไปใน repo แล้วใช้คำสั่ง git status เพื่อเช็คว่าตอนนี้มีไฟล์อะไรที่เพิ่งมีการอัปเดตบ้าง

git status

git status จะบอกว่าไฟล์ไหนเพิ่งถูกเพิ่มมาใหม่ (new) ถูกแก้ไข (modified) หรือถูกลบทิ้ง (removed) ทำไมมันง่ายอย่างนี้ 555+

ตัวอย่างการใช้ git status
git status

Git add

ถ้า git status บอกว่าอะไรมีการเปลี่ยนแปลง git add คือการบอกโปรแกรมว่าเราอยากจะ track และ snap ไฟล์อะไรบ้าง i.e select what’s to save

ตัวอย่างนี้ แอดอยากจะติดตามการเปลี่ยนแปลงของไฟล์ data.csv และ model.txt อย่างใกล้ชิด I’m watching you ยั๊งงง 555+

ให้พิมพ์ git add ตามด้วยชื่อไฟล์นั้น

git add data.csv
git add model.txt

หรือถ้าเราอยากจะ add ทุกไฟล์ทีเดียว ให้พิมพ์ . ต่อจากคำว่า add แบบนี้

git add .

git จะเพิ่มไฟล์ทั้งหมดเข้าไปอยู่ใน staging area เพื่อรอรับคำสั่งต่อไป

ตัวอย่างการใช้ git add
git add

Staging area เป็นเหมือนจุดพักรถชั่วคราว เหมือนเราบอก git ว่าสองไฟล์นี้เป็นไฟล์ที่เราอยากจะ snapshot มันนะ แต่ยังไม่ snap จนกว่าจะรันคำสั่งต่อไป

🚀 ปกติเวลาเรารัน git add เสร็จแล้ว เราจะเช็คสถานะด้วย git status อีกรอบนะครับ

Git commit

คำสั่งถัดมาคือ git commit เปรียบเสมือนปุ่ม “save” ในโปรแกรมคอมพิวเตอร์

ในมุมมองของ git คือการ snapshot สิ่งที่เราฝากไว้ใน staging area เซฟมันลงไปใน git history ของ repo นั้นๆ

Snapshot is like taking a picture (with your git camera)

เวลาเราใช้คำสั่งนี้ ให้เพิ่ม flag -m ตามด้วย “commit message” คล้ายๆการเขียนโน้ตเพื่อบอกว่าเรากำลังจะเซฟอะไรลงใน repo

git commit -m "Add data and model to repo"

อธิบาย git commit ด้วยภาษาบ้านๆคือ ช่วยบันทึก snapshot ของไฟล์ data.csv และ model.txt ที่เพิ่มมาใหม่เมื่อกี้ลงใน repo หน่อย

ตัวอย่างการใช้ git commit
git commit -m “message”

ทุกครั้งที่มีอัปเดตสำคัญใน repo เราอยากจะ commit การเปลี่ยนแปลงนั้นเสมอ เผื่อมีอะไรพัง เราจะได้ย้อนเวลากลับไปหา commit ในอดีตได้ เฉียบ

นอกเรื่องแป๊บ ขนาด Google Sheets ยังมี version control เลย

Version history ของไฟล์ Google Sheets
Version history ของไฟล์ Google Sheets

Git log

เราสามารถเรียกดูประวัติการ commit ของโปรเจ็คเราได้ด้วยคำสั่ง git log

git log

Log จะแสดงข้อมูล 4 อย่างคือ

  • Commit Hash – unique ID สำหรับ commit นั้นๆ (40 ตัวอักษร)
  • Author – ใครเป็นคน commit
  • Date – วันที่และเวลา
  • Message – ข้อความที่ใส่เข้าไปใจ commit -m
ตัวอย่างการใช้ git log
git log

ถ้าเราเพิ่ม option –oneline แต่ละ commit จะถูกย่อเหลือบรรทัดเดียว เหลือแค่ hash กับ message อ่าน log ง่ายขึ้นหน่อย (มั้ง 555+)

git log --oneline

Git diff

ถ้าเราอยากดูการเปลี่ยนแปลง (changes) ที่เราแก้ไข เพิ่มลดในไฟล์ต่าง คำสั่งหลักที่เราใช้คือ git diff เขียนได้หลายแบบมากอยู่ที่เราจะเทียบ change กับอะไร

git diff –staged ใช้ดูสิ่งที่เราเพิ่งเพิ่มเข้าไปใน staging area

git diff --staged

ตัวอย่างนี้ แอดเพิ่ม code สองบรรทัดในไฟล์ hello.py แล้ว add มันเข้าไปใน staging พอเรารันคำสั่ง git diff ระบบจะบอกว่า line ไหนที่เราเพิ่งเขียนเพิ่มใหม่ (+)

ตัวอย่างการใช้ git diff
git diff

เราสามารถใช้ git diff เปรียบเทียบระหว่าง commits ได้ด้วย แบบนี้

git diff commit1 commit2

Git revert

มาถึง highlight ของ git คือคำสั่งย้อนเวลา ยั๊งงง 555+

Reverses the changes made in a specific commit.

git revert คือปุ่ม “safe undo” โดย git จะสร้าง commit ใหม่ที่ undo การเปลี่ยนแปลงทั้งหมดของ commit ก่อนหน้า หรือ specific commit ที่เราเลือก

git revert <commit-hash>

ตอนนี้ project แอดมีสอง commits

  • Add data and model to repo
  • Add two print to hello.py file

ลองเขียน git revert commit ล่าสุด แค่ใส่เลข hash แบบนี้

git revert fec50ca

git จะสร้าง commit ใหม่ที่ขึ้นต้นด้วย Revert

ตัวอย่างการใช้ git revert
git revert

Git branch

ถ้าใครเคยดู Marvel โลก multiverse จะเข้าใจ git branch ทันทีเลย เหมือนเราแตก timeline โปรเจ็คของเราเป็นสาขาต่างๆ i.e. branching

git branch
git branch [new branch name]

เราใช้คำสั่ง git branch เพื่อดูว่าตอนนี้เรามีกี่ timeline (branches) หรือจะสร้าง branch ใหม่ก็แค่เขียนชื่อ new branch ต่อท้ายคำสั่งได้เลย

ตัวอย่างการใช้ git branch สร้างสาขาใหม่
git branch

เครื่องหมาย * คือสัญลักษณ์ที่บอกว่าตอนนี้เรากำลังทำงานอยู่ใน branch ไหน

โปรเจ็ค software development แตก branch กันฉ่ำ 555+ แต่ละ branch เหมือนการขยายออกไปทำ feature ใหม่ๆ ก่อนจะ merge กลับมาที่ timeline หลัก (main)

Git switch

เราใช้ git switch เพื่อย้ายไปอยู่ branch ใหม่ syntax ง่ายๆแบบนี้

git switch [branch name]

ตัวอย่างนี้ แอดย้ายจาก main ไปอยู่บน *DaBest เรียบร้อย

ตัวอย่างการใช้ git switch เพื่อย้าย branch
git switch

จริงๆเราสามารถสร้าง branch ใหม่และย้ายไปทำงานใน branch นั้นได้เลย ด้วยคำสั่ง git switch -c ตัวอย่างนี้ แอดสร้าง branch ใหม่ชื่อ “new_analysis”

git switch -c new_analysis

option -c ย่อมาจาก create สร้างและย้าย branch ง่ายเลย แต่ทำไมต้องมีหลาย command ด้วย ตอนเริ่มเขียน git ใหม่ๆ จะงงๆหน่อย 555+

ตัวอย่างการใช้ git switch -c เพื่อสร้าง branch ใหม่
git switch -c

อีก git command ที่แอดเห็นเพื่อนๆทีม dev ใช้กันเยอะคือ checkout ได้ผลลัพธ์เหมือนกับ switch -c เมื่อกี้เป๊ะ (แต่เขียน git switch เข้าใจง่ายกว่าเนอะ)

git checkout -b new_analysis

Git pull & push

มาถึง 2 commands สุดท้ายไว้ใช้ทำงานกับ remote repo (ที่ฝากไว้บน GitHub หรือ GitLab เป็นต้น)

อธิบายง่ายๆ อีกแล้ว 555+ git pull ใช้ในการดึงของจาก remote repo ลงมาที่คอมเรา ส่วน git push คือการผลักของจากคอมเราขึ้นไปที่ remote repo

git pull
git push

บทความนี้เราใช้ git แบบ local ยังไม่ได้สมัคร GitHub ใดๆ ไว้บทความต่อๆไปแอดมาเขียนอธิบายเรื่อง GitHub แบบเต็มๆอีกทีนะคร้าบ

🚀 เวลาเขียนเรื่อง technical แบบนี้ อธิบายยากไป ก็อ่านไม่รู้เรื่อง อธิบายง่ายไป over-simplified ก็เสี่ยงดราม่า 555+ เนื้อหา blog เราจะเน้นทาง simplicity มากกว่า

ถ้าใครมี feedback อะไร comment บอกแอดได้เลยนะคร้าบ

Free Learning Path

คอร์สเรียนฟรี Git 101 บน Microsoft Learn
คอร์สเรียนฟรี Git 101 บน Microsoft Learn

สำหรับเพื่อนๆที่สนใจเรียน git เพิ่ม ลองดูคอร์สเรียนฟรี Introduction to Version Control with Git บน Microsoft Learn ได้นะครับ

เนื้อหาเป็นแบบ text-based 4 modules ใช้เวลาเรียนประมาณสองชั่วโมง รู้เรื่อง

หรือลองแวะมาดู git tutorial บน W3schools ก็ได้เช่นกัน ❤️

แอดอยากทำคอร์สฟรีสอนเรื่องนี้มานานแล้วด้วย ชื่อคอร์ส “Git for Human” เท่จัง 555+ ใครอยากเรียนบ้าง ลงชื่อ comment กันได้เลยนะครับ เย้

4 responses to “10 Git Commands สำหรับผู้เริ่มต้น พร้อมตัวอย่างทำตามได้ทันที”

  1. Sarah59 Avatar

    อยากเรียนวิธีที่ใช้ git ผ่าน vscode ด้วยจังค่ะ เห็นแผนผังประวัติแตก branch เอย log เอย แมสเสจที่เด้งรัวๆ ในเทอมินัลเอยแล้วมึน 55

    1. Kasidis Satangmongkol Avatar

      จัดไปค้าบ

  2. Chin Phurin Avatar
    Chin Phurin

    แอบเสียดายที่ bootcamp 10 แขกรับเชิญน้อยกว่า bootcamp 8 แถม bootcamp 11 ยังได้ w3 อีก เสียดายมาก อยากได้มั่ง T-T

    1. Kasidis Satangmongkol Avatar

      ไม่มีอะไรต้องเสียดายเลยคร้าบคุณ Chin มุแง้

      ความรู้เรียนยังไงก็ไม่มีวันหมด ลุยกันต่อใน alumni นะคร้าบ

Leave a Reply to Chin PhurinCancel reply

Discover more from DataRockie

Subscribe now to keep reading and get access to the full archive.

Continue reading