คำสั่งพื้นฐาน Git ที่ควรรู้

Phatcharaphan Ananpreechakun
odds.team
Published in
6 min readJun 1, 2024

Git เป็น Version control ตัวหนึ่งที่ทำให้เราสามารถจัดการพวกไฟล์ต่างๆ ที่เราได้เพิ่ม แก้ไข หรือว่าอะไรต่างๆใน Project ซึ่งจะทำให้เรารู้ข้อมูลต่างๆใน Project ของเราว่ามี History อะไรบ้าง ใครแก้ไขบ้าง เพื่อที่เราจะได้ไปถามเพื่อนได้ว่า เอ๋ “โค้ตตรงนี้เขียนเพื่ออะไรคะ” ไรงี้ ซึ่ง Git นั้นก็มีประโยชน์มากมาย ซึ่งก็แนะนำให้ใช้งาน

เรามาดูกันว่าสิ่งที่เราควรจะรู้ในการใช้ Git พื้นฐานนั้น มี command line อะไรบ้าง

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

  1. git initซึ่งเป็นคำสั่งที่สร้าง Repository โดยคำสั่งนี้จะสร้าง directory .git ที่ซ่อนใน folder project ของคุณ ซึ่ง Git จะช่วยติดตามการเปลี่ยนแปลงต่างๆใน Project

2. git clone [repository URL] ซึ่งเป็นคำสั่งที่เอาโค้ตมาจากแหล่งต่างๆเช่น Github, Bitbucket, Gitlab ซึ่ง Git จะทำการสร้าง copy ของ reposity บนเครื่องของคุณ

3. git status ซึ่งเป็นคำสั่งในการตรวจสอบสถานะ ซึ่งจะแสดงให้เห็นภาพรวมของสถานะปัจจุบันของ Repository บนเครื่องของคุณ ซึ่งจะแสดงให้เห็นไฟล์ที่ถูก staged, unstaged และ untracked ซึ่งจะช่วยให้คุณเห็นว่ามีไฟล์ไหนที่มีการเปลี่ยนแปลง แก้ไขตรงไหน เพื่อให้เรามั่นใจว่า เราไม่ได้แก้ไข เกินขอบเขตที่เราต้องการ

ซึ่งจะเห็นว่า จะเป็นสีแดงตรง index.html อันนี้จะเป็นไฟล์ใหม่ (untracked) ที่เราสร้างขึ้น

ซึ่งจะเห็นว่า จะเป็นสีแดงตรง index.html ซึ่งจะต่างจากก่อนหน้า ซึ่งจะเป็นไฟล์ที่เราได้ทำการแก้ไข

ซึ่งจะเห็นว่า จะเป็นสีเขียนตรง index.html ซึ่งจะเป็นไฟล์ที่เราเพิ่มการเปลี่ยนแปลงเข้าไปใน git และเพื่อพร้อมที่จะทำการใช้ git commit ต่อไป

4. git add [file] or git add . ซึ่งคำสั่งนี้เพื่อเพิ่มรวมการเปลี่ยนแปลงไปยัง staging area และในขั้นตอนต่อไปนั้นจะเป็น commit

ในคำสั่ง git add . นั้นเราจะต้องระวังนิดนึงตรงที่จะทำการเปลี่ยนแปลงที่ยัง staging area ทั้งหมดที่เราได้ทำการแก้ไขหรือว่าเพิ่มไฟล์ใหม่ ซึ่งก่อนที่เราจะใช้คำสั่งนี้ จะต้อง git status ดูก่อนว่ามีไฟล์ไหนบ้างที่เราแก้ไข เผื่อเราเผลอไปแก้ไขผิดไฟล์แล้วก็ดันไป commit หมด

ในคำสั่ง git add [file] อันนี้จะเป็นการเลือกไฟล์ที่เราจะทำการเปลี่ยนแปลงไปยัง staging area ในนี้เราก็เลือกไฟล์ที่เราต้องการได้เลย

5. git commit -m "Your commit message" เมื่อการเปลี่ยนแปลงของคุณถูก stage แล้ว คุณก็สามารถ commit ลงไปใน repository commit คือ snapshot ของ repository ของคุณในจุดเวลาหนึ่ง ซึ่งคำสั่งนี้จะทำการสร้าง commit ใหม่พร้อมกับข้อความอธิบายการเปลี่ยนแปลง

git commit --amend -m "updated commit message" ซึ่งคำสั่งนี้จะช่วยให้เราสามารถแก้ไข commit message ล่าสุดที่เราได้ commit ไป เผื่อเราเขียน message ผิดๆ

หรือ เราสามารถใช้ git commit --amendแล้วทำการ enter มันก็จะภาพไปยังหน้านี้ และเราก็จะเห็นข้อมูลต่างและแก้ไข commit message และเมื่อเข้าไปยังหน้านี้ก็กด A และจะสามารถแก้ไข และเมื่อแก้ไขข้อความเสร็จแล้วให้กด esc เพื่อทำการออกจาก stage การแก้ไขและหลังจากนั้นให้ใส่ wq! เพื่อออกจากหน้านั้น

6. git log เป็นคำสั่งที่สามารถดู history ใน repository ใน project ซึ่งคำสั่งนี้จะแสดงรายการ commit ทั้งหมดรวมถึง Author Date และข้อความ commit

git log --grap="[keyword]" ซึ่งคำสั่งนี้จะช่วยให้เราค้นหา log ต่างๆได้ด้วย wording ที่เราต้องการค้นหา ในตัวอย่างเช่น เราต้องการค้นหาคำว่า CSS

git log --graph --oneline --all ซึ่งคำสั่งนี้จะช่วยให้เราเห็นเป็น commit history เป็น graph และจะเป็นบรรทัดเดียว จะเห็นเลข commit, commit message, and branch name แต่จะไม่เห็นว่าใครเป็นคนทำใน commit นั้น

7. การสร้าง Branching ซึ่งคำสั่งนี้จะช่วยให้คุณสามารถทำงานบน Feature หรือ การแก้ไข Bug ต่างๆ โดยไม่กระทบกับ Code หลัก ซึ่งการใช้งานก็ตามชื่อคือเป็นการแตกสาขาออกมานั่งเอง เพื่อให้เราสามารถทดลองบางอย่าง หรือเพื่อแยกกันพัฒนา Feature ของ Program ก็ได้

# Create a new branch 
git branch [branch name]

# List all branches
git branch

# Delete a branch
git branch -d [branch name]

git branch ซึ่งจะแสดงให้เห็นว่า ณ ปัจจุบันเราอยู่ที่ branch ไหนและทั้งหมดของ branch ที่อยู่ใน locally

git branch -a ซึ่งคำสั่งนี้จะแสดงให้เราเห็นว่ามี branch ไหนบ้างที่อยู่ทั้ง locally และ remote ตามภาพ ซึ่งสีเขียวจะเป็น current branch ที่เรากำลังอยู่ และสีแดงจะเป็น branch ที่อยู่ใน remote

git branch -r ซึ่งคำสั่งนี้จะแสดงให้เราเห็นว่ามี branch ไหนบ้างที่อยู่บน remote

git branch -b [branch name] ซึ่งคำสั่งนี้จะทำให้เราสามารถสร้าง branch ใหม่ได้ตามภาพ

git branch -d [branch name] ซึ่งจะเป็นการ delete branch และก็จะมีคำสั่งต่างกันในการ delete branch บน locally หรือว่า delete from Remote

Delete locally:

git branch -d [branch name] ซึ่งคำสั่งนี้จะใช้ในตอนที่ branch ของเรา merged ไปยัง branch อื่นแล้วเช่น branch: main

ซึ่งถ้าใช้ git branch -d [branch name] ใน branch ที่ยังไม่ได้ merged ก็จะได้ error แบบนี้ ตามภาพข้างล่าง

git branch -D [branch name] ซึ่งคำสั่งนี้จะใช้ในตอนที่ branch ของเรายังไม่ได้ merged และต้องการที่จะ force delete

Delete from Remote:

git push origin --delete [branch name] ซึ่งคำสั่งนี้จะทำการลบ branch บน remote ของเราใน repository

8. git checkout [branch name] ซึ่งจะเป็นคำสั่งที่ทำให้เราสลับไปยัง branch ที่เราต้องการได้

และถ้าเราใช้คำสั่ง git checkout -b [branch name] เราก็จะสามารถสร้าง branch ใหม่ได้ด้วยเช่นกัน และคำสั่งนี้จะทำการสลับไปยัง branch ที่เราต้องการสร้างได้เลย ซึ่ง git branch [branch name] นั้นจะไม่ได้สลับไปยัง branch นั้นเลย

9. git merge [branch name] ซึ่งคำสั่งนี้จะเป็นการ merge code จาก branch หนึ่งไปยังอีก branch หนึ่ง เพื่อรวมการเปลี่ยนแปลงจาก branch ที่ระบุไปยัง branch ปัจจุบันของคุณ

10. git push [remote] [branch name] ซึ่งคำสั่งนี้จะเป็นการ share การเปลี่ยนแปลงต่างๆที่เราได้ทำไปและ push ไปยัง repository หลังจากนั้นก็จะขึ้นไปยัง remote นั้นและคนอื่นๆใน project ก็จะสามารถเห็น code ของคุณได้

11. git pull [remote] [branch name] ซึ่งคำสั่งนี้จะทำการ pull code ล่าสุดจาก remote ลงมาในเครื่องของเรา

12. Fetching Changes

git fetch [remote] ซึ่งคำสั่งจะช่วยให้คุณสามารถเห็น branch ใหม่บน remote repository ได้

จะเห็นว่าเมื่อเราใช้คำสั่ง git branch เราก็จะมี branch เท่านี้

แต่ถ้าเราเข้าไปดูใน repositoty ก็จะเห็นว่ามี branch ใหม่ชื่อว่า feature/address

และเราต้องการ branch นั้นและเราจะใช้คำสั่ง git fetch origin หลังจากนั้นเราก็จะสามารถเข้าถึง branch นั้นได้แล้วในเครื่องของเรา

13. Viewing Differences

git diff ซึ่งคำสั่งนี้จะช่วยให้เราเห็นว่าสิ่งที่เราแก้ไขมีอะไรบ้างในไฟล์นั้น ซึ่งมันจะช่วย confirmed ว่าเราไม่ได้เพิ่ม code ที่ไม่ต้องการเข้าไปใน file นั้นนะ

14. Stashing Changes

git stash ซึ่งคำสั่งนี้จะช่วยให้เราซ่อนโค้ตเราได้ไปยัง code ที่ก่อนจะแก้ไขได้ ในภาพจะเห็นว่า เมื่อเรา git status ก็จะเห็นมีไฟล์นึงที่เรากำลังแก้ไขอยู่และเรามีงานอีกมาพอดีก็เลยอยากที่จะแก้ไขงานใหม่ก่อนไรงี้ เราก็เลยซ่อนโค้ตเมื่อกี้ก่อนหลังจากที่เราใช้คำสั่ง git stash นั้นก็จะทำการซ่อนโค้ตเราไปเลย และเมื่อเรามาใช้คำสั่ง git status อีกรอบก็จะไม่เห็นว่ามีโค้ตที่กำลังแก้ไขแล้ว

git stash pop และถ้าเราต้องการเอาโค้ตกลับมานั้น เราจะใช้คำสั่งนี้ และโค้ตที่เราซ่อนเมื่อกี้ก็จะกลับมา

15. Reverting changes

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

git reset --soft HEAD~1 คำสั่งนี้จะทำการ undo commit ล่าสุด

ดังภาพจะเห็นว่าเมื่อเราใช้คำสั่งนั้นแล้ว commit ล่าสุดก็จะหายไป

และเมื่อเรามาใช้คำสั่ง git status อีกรอบมันก็จะไปยัง stage รอ commit message

16. Cherry-Picking Commits

git cherry-pick [commit hash] คำสั่งนี้จะช่วยให้เราเลือก commit hash ที่เราต้องการไปยัง branch ที่เราต้องการได้ เช่น ใน branch นั้นมีการแก้ไขโค้ตมากมายหลาย commit มาก ซึ่งเราไม่อยาก merge code branch นี้ไปยัง branch ที่เราต้องการ เราแค่อยากได้บาง commit เท่านั้น ซึ่งคำสั่งนี้ก็จะช่วยในเรื่องนี้

ซึ่งในภาพจะเห็น เริ่มแรกเราอยู่ branch: develop และต้องการ commit hash : c8d8937 เพื่อเอาไปใส่ใน branch : main

17. Viewing Remote repository

git remote -v ซึ่งคำสั่งนี้จะช่วยให้เราดูว่าเรามี remote อะไรใน project นี้

git remote add [name] [url] ซึ่งคำสั่งนี้จะช่วยให้เราสามารถเพิ่ม remote ได้ ใน case นี้เผื่อเรามี repository หลายที่เช่น เราอาจจะมี remote ใน Github และอีกที่อาจจะอยู่ใน Gitlab ก็เป็นไปได้ ซึ่งจะช่วยให้เราง่ายต่อการ pull push code ไปยัง remote ที่เราต้องการได้อย่างง่ายดาย แต่ก่อนจะไป pull push code ยัง remote นั้นๆ เราจะต้องเพิ่ม remote ก่อน

git remote remove [name] คำสั่งนี้จะช่วยให้เราลบ remote ที่เราไม่ต้องการทิ้งได้

git remote set-url [name][url] คำสั่งนี้จะช่วยให้คุณสามารถแก้ไข url ของ remote ได้

คิดว่าเป็น command line พื้นฐานที่เราควรจะรู้ หวังว่าจะเป็นประโยชน์กับผู้อ่านทุกคนน๊าค่า ^-^

เจอกันใหม่บทความหน้าค่าา ^-^

--

--