ขอเกริ่นไว้นิดนึงสำหรับคนที่ไม่รู้จัก  Git นะครับ Git คือ Version Control ที่ไว้ช่วยเก็บรักษาไฟล์หรือแชร์ Source Code ให้ผู้อื่นได้ สามารถย้อนกลับไปยัง Version ต่างๆได้ หรือ Track ได้ว่าใครเปลี่ยนแปลงแก้ไข Code หรือเพิ่มไฟล์ จริงๆข้อดีมีเยอะแยะมากมาย หรือวิธีติดตั้ง สามารถไปหาอ่านตามเว็บต่างๆได้ครับ แต่บทความนี้ขอเน้นการใช้งานคำสั่ง Git พื้นฐานและใช้บ่อยเป็นหลัก นะครับเรามาเริ่มกันเลยดีกว่า

ตั้งค่า Git

เริ่มตั้งค่าโดยใส่ชื่อและอีเมล์

git config --global user.name "your_name"
git config --global user.email "[email protected]"

แสดงสถานะการตั้งค่า

git config --list // แสดงเฉพาะ Repository นี้
git config --global --list // แสดงทั้งหมด

ตั้งค่าให้ git บันทึก username, password จำไว้ในเครื่องเราเอง เพื่อไม่ให้ถาม username, password ในตอนเวลาเรา pull โค้ดลงมา

git config credential.helper store // จำเฉพาะ Repository นี้
git config --global credential.helper store // จำ Repository ทั้งหมด

สร้าง Project ด้วย Git

สำหรับสร้าง Git Repository โดยเมื่อสร้าง Directory ขึ้นมาแล้ว จากนั้นให้เข้าไปใน Directory และใช้คำสั่งตามด้านล่างนี้

git init

กรณีมี Repository หรือ Project ที่ใช้ Git อยู่แล้ว

สามารถดึงหรือ Clone ลงมาที่ Directory เครื่องเราได้ 2 รูปแบบ ดังนี้

1.  ดึงข้อมูลจาก Repository ที่อยู่บนเครื่องของเราเอง

git clone /path/to/repository

2.  ดึงข้อมูลจาก Repository จากเครื่องอื่น

git clone [email protected]:/path/to/repository

คำสั่งเพื่อบันทึก

คำสั่งเพื่อเปลี่ยนสถานะ (Stage) รอการ Commit

git add <file_name> // ไฟล์เดียว
git add . // ทุกไฟล์ที่อยู่ภายใต้ Directory ปัจจุบัน
git add --all หรือ git add -A // ทุกไฟล์ใน Project
git add *.html // หลายไฟล์ระบุนามสกุล

คำสั่งเพื่อบันทึกไฟล์ทั้งหมด ขั้นตอนนี้จะ Commit ไปที่ Repository ภายในเครื่องของเรา (Local) ส่วน -m เป็น Option “เพื่อใส่ข้อความว่าได้แก้ไขอะไรลงไปบ้าง”

git commit -m "ข้อความอธิบายการเปลี่ยนแปลง"

หรือจะรวมทั้ง add และ commit ในคราวเดียวกันก็ใช้ -am

git commit -am "ข้อความอธิบายการเปลี่ยนแปลง"

กรณีที่ commit ไปแล้ว แต่ลืมและมีแก้อะไรเล็กน้อย ทำให้ต้อง commit เพิ่มเติมเข้าไป กลายเป็นว่า commit สิ่งที่เหมือนกันเข้าไปซ้ำๆ “ทำให้ Commit มันรกโดยใช่เหตุ” ให้แก้ไขโดยเพิ่ม –amend เข้าไปด้วย เพื่อที่มันจะได้รวบเป็น commit เดียวกัน

git commit -m --amend "ข้อความอธิบายการเปลี่ยนแปลง"
// หรือ
git commit -am --amend "ข้อความอธิบายการเปลี่ยนแปลง"

คำสั่งเพื่อส่งไฟล์ขึ้นไปที่ Repository บน Git (Remote)

git push origin <branch_name>

สั่งคำเพื่อซ่อนการเปลี่ยนแปลง

สั่งคำเพื่อเก็บซ่อน Code ที่ทำการเปลี่ยนแปลง โดยประโยชน์ของมันคือ ในขณะที่เรากำลังทำงานแล้วบังเอิญมีงานแก้ Bug ด่วนแทรกเข้ามาพอดี ปัญหาคือถ้าเราแก้ Bug เวลา Push ขึ้นไปก็จะติด Code ที่เรากำลังทำอยู่ตอนนั้นไปด้วย Git stash จึงเข้ามาเพื่อช่วยเก็บซ่อน Code นี้ไว้ก่อนในเครื่องเราชั่วคราว เพื่อไม่ให้มีผลกระทบตามที่กล่าวมาโดยเราสามารถใช้คำสั่ง

git stash
git stash -u // ให้ stash ไฟล์ที่ untracked ไปด้วย

หลังจากใช้คำสั่งด้านบน จะสังเกตได้ว่า Code ที่เพิ่งเขียนไปจะหายไป เพราะมันถูกซ่อนนั่นเอง โดยเราสามารถดูรายการทั้งหมดได้โดยสั่ง

git stash list

เมื่อเราแก้ Bug และ Push ขึ้นไปแล้ว เราอยากจะนำ Code ที่ซ่อนไว้กลับมาทำต่อเราเพียงใช้คำสั่ง

git stash pop

สามารถ Clear รายการที่ถูกซ่อน โดยใช้คำสั่ง

git stash clear

คำสั่งเพื่อลบหรือยกเลิก

คำสั่งยกเลิกเมื่อเราสั่ง git add ไปแล้ว

git reset <file_name>

คำสั่งยกเลิกเมื่อเราสั่ง git commit ไปแล้วบน Local

–hard คือ จะลบสิ่งที่เคย commit ออกไปเลย กลับไปยัง commit ก่อนหน้า

git reset --hard HEAD~1

–soft คือ จะนำสิ่งที่เคย commit กลับมายังสถานะ staged เหมือนก่อน commit แต่ add ไปหมดแล้ว

git reset --soft HEAD~1

หรือถ้ารู้ชื่อไฟล์ อาจจะใช้

git rm --cached <file_name>

คำสั่งดูสถานะ

เพื่อดูการเปลี่ยนแปลงของ Repository บนเครื่องเรา (Local) เอง เช่น เพิ่ม ,แก้ไข,ลบ ไฟล์ต่างๆ

git status

คำสั่งดูความแตกต่าง

ใช้สำหรับดูว่า Code มีอะไรเปลี่ยนแปลงและแตกต่างไปบ้างเช่น มี เพิ่ม ลบ แก้ไข อะไรไปบ้าง โดยเทียบกับ Commit ที่ผ่านมา

git diff // เฉพาะ Branch หรือ Commit ID ที่เราใช้อยู่ ณ ขณะนี้
git diff <commit_id> // แบบระบุ Commit ID 
git diff <commit_id> <commit_id> // เปรียบเทียบระหว่างสอง Commit

คำสั่งดู Log

คำสั่งใช้ดูประวัติการ commit ต่างๆ ของRepo โดยจะแสดง เลขcommit, commit message, ชื่อผู้เขียน, email, และเวลาที่ commit นั้นๆ

git log
git log --oneline // แสดงแต่ละlog เหลือบรรทัดเดียว
git log --pretty=oneline // แสดงแต่ละlog เหลือบรรทัดเดียว แต่แสดง commit เต็มไม่ซ่อน 
git log --graph // แสดงเป็นเส้น Branch ให้ดูง่ายขึ้น
git log --oneline --graph // ถ้าใช้แบบนี้จะดูง่ายขึ้นมาก

ส่วนแบบนี้แสดงเป็นสี บอกวัน และคนที่ Commit รวมถึงเส้น Branch

git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

ซึ่งแน่นอนคำสั่งมันค่อนข้างยาวไป ดังนั้นให้เพิ่ม Alias คำสั่งเหล่านั้น ไว้ใช้ใน Git Config และ Set เป็น Global เพื่อไว้ใช้งานได้ทุกๆที่บนเครื่องของเรา ดังนี้

git config --global alias.logline "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

เวลาจะเรียกดู ก็ใช้คำสั่งสั้นๆ

git logline

คำสั่งดึงไฟล์ที่เปลี่ยนแปลงจาก Remote Repository

เพื่อใช้ดึงความเปลี่ยนแปลงจาก Remote Repository มายัง Local  Repositoryมายัง

git fetch

คำสั่งดึงไฟล์ หรืออัพเดท Source Code ภายในเครื่อง (Local) ให้ตรงกับ Repository (Remote) โดยคำสั่ง git pull นั้นจะทำการ git fetch และ git merge ไปด้วย

git pull origin <branch_name> // ระบุ Branch
git pull origin // ไม่ระบุ Branch

คำสั่งเกี่ยวกับ Branch

Branch มีเพื่อเราจะได้แยกการพัฒนาออกจาก Branch หลัก โดย Branch เริ่มต้นจะชื่อว่า Master จากนั้นเมื่อพัฒนาเสร็จเราจึงทำการ Merge กลับมายัง Master อีกครั้ง

คำสั่งสร้าง Branch

git branch <branch_name>

คำสั่งดูรายชื่อ branch ทั้งหมด

git branch

สมมติเรามี Branch : master , dev , fixbug ผลลัพท์จะแสดง ประมาณนี้ เครื่องหมายดอกจัน * หมายถึงเรากำลังอยู่ที่ Branch นั้น

* master
  dev
  fixbug

ลบ Branch (Local)

git branch -d <branch_name>

ลบ Branch (Remote)

git push origin --delete <branch_name>

คำสั่งสลับเปลี่ยนไปยัง Branch ที่มีอยู่แล้ว

git checkout <branch_name>

คำสั่งเปลี่ยนไปยัง Branch ที่ไม่มี นั่นคือทำการสร้าง Branch ใหม่และสลับไป Branch นั้นทันที

git checkout -b <branch_name>

คำสั่งเปลี่ยนไปยัง Branch ที่ไม่มี นั่นคือทำการสร้าง Branch ใหม่และสลับไป Branch นั้นทันที โดยอ้างอิง Commit ID (บางครั้งเราอาจจะต้องย้อนกลับไปยัง Code ชุดเก่า)

git checkout -b <branch_name> <commit_id>

คำสั่งการรวม Branch มายัง Local

git merge <branch_name>

คำสั่งการรวม Branch มายัง Local (ไม่ใช่เป็น fast-forward)

git merge --no-ff <branch_name>

ความแตกต่างระหว่างการใช้และไม่ใช้ –no-if

คำสั่งเกี่ยวกับ Remote

แสดงข้อมูล URL ของ Repository (Remote)

git remote -v

เพิ่ม URL ของ Repository (Remote)

git remote add origin <remote_url>

เปลี่ยน URL ของ Repository (Remote)

git remote set-url origin <remote_url>

ตั้งชื่อ Remote ใหม่ (เช่น เปลี่ยนจาก origin ไปเป็น destination จะใช้ git remote rename origin destination)

git remote rename <old_name> <new_name>

ลบ Remote

git remote rm <remote_name>

คำสั่งเกี่ยวกับ Tagging

แสดง Tag ทั้งหมด

git tag

แสดงเรียงจากวันที่สร้างล่าสุด

git tag --sort=-creatordate

ค้นหา Tag

git tag -l "keyword" // ระบุคีย์เวิร์ด
git tag -l "keyword*" // ระบุคีย์เวิร์ดและตามหลังด้วยอะไรก็ได้

สร้าง Tag

git tag -a <tag_name> -m "ข้อความหมายเหตุ"

คำสั่งเพื่อส่งไฟล์ขึ้นไปที่ Repository บน Git (Remote) โดยอ้างอิง Tag

git push origin <tag_name> // แบบระบุ tag
git push origin --tags // tag ทั้งหมด

คำสั่งอื่นๆ

คำสั่งย้อนกลับไปยัง Commit ล่าสุด หรือยกเลิกการแก้ไขไฟล์

git checkout — <file_name>

สำหรับดู Version ของ Git

git version

สำหรับดูคำสั่ง Git ว่ามีคำสั่งอะไรบ้างและใช้งานอย่างไร

git help // ดูว่ามีคำสั่งอะไรบ้าง
git help <command_name> // ดูวิธีการใช้งานของคำสั่งนั้นๆ

แสดงไฟล์ที่อยู่ในสถานะ Untracked

git clean -n

ลบไฟล์ที่อยู่ในสถานะ Untracked

git clean -df

คำสั่งอาจจะไม่ครบถ้วน เพราะตอนนี้ผมใช้แค่นี้ครับ คิดว่าถ้ามีคำสั่งอื่นๆก็จะมาอัพเดทในบทความนี้ที่เดียวเลยอีกครั้งครับ ^^

Author: ชื่อ ศิริชัย ธีรภัทรสกุล (ตั้ม) เป็นนักพัฒนาเว็บไซต์ สนใจเรื่องการพัฒนาตัวเอง หลงใหลการถ่ายรูป เวลาว่างมักชอบอ่านหนังสือ และเขียนบล็อก