Jitrak Blog

วงแหวนเว็บ

Basic of Git command

September 30, 2020

บทความนี้เป็นการนำบทความที่เคยเขียนเมื่อหลายปีมาแล้ว มาทำการ Repost ใหม่

ก่อนหน้านี้ผมได้เขียนผมความเกี่ยวกับทำไมเราต้องรู้จัก และใช้ Version Control System
คราวนี้ผมจะมาต่อกันที่เรื่องคำสั่งที่เป็นพื้นฐานของ Git กัน
ส่วนเรื่องการติดตั้งนั้นผมขอข้ามนะครับ เนื่องจากไม่ยากมาก และขึ้นอยู่กับ OS ที่แต่ละท่านใช้ด้วย

ต้องบอกก่อนว่าทำไมผมถึงเริ่มที่การใช้ Git Command
ทำไมถึงไม่เริ่มที่ Git GUI (Graphic User Interface) ซึ่งมันน่าจะง่ายกว่าเยอะ
จริง ๆ แล้ว ผมก็เป็นคนนึงที่เริ่มใช้ Git จาก GUI นั้นแหละ
แต่ก็เจอบางงานที่ไม่สามารถใช้ Git GUI ได้
เช่น ทำงานบนเครื่อง Server ที่มีแต่ Command line
รวมถึงหากเข้าใจคำสั่งต่าง ๆ แล้ว เราสามารถเปลี่ยนไปใช้กับแบบที่มี GUI ได้ไม่ยากเลย
เพราะจริง ๆ แล้ว แบบที่มี GUI นั้น เบื้องหลังมันก็คือ Command นั้นแหละ แค่เราไม่ต้องพิมพ์เอง
ผมจึงตัดสินใจเขียนการใช้ Git Command

Tools ที่ต้องใช้

หากเป็นผู้ใช้งาน Mac หรือ Linux ก็จะใช้ Terminal ที่ Build-in มาได้เลย
ส่วน Windows นั้นก็สามารถหาวิธีใช้ได้ค่อนข้างหลากหลาย
อย่าง CMD หรือ MinTTY ที่ลงมาพร้อมกับ Git for Windows
หรือหากใครอยากจะลองใช้ Terminal ของ Windows Subsystem for Linux (WSL) ก็ได้
โดยส่วนตัวก็ค่อนข้างแนะนำสำหรับคนที่่ทำงานสาย Software Development
ให้ไปใช้ WSL เลยเพราะปัจจุบัน Windows มี WSL 2
ที่ประสิทธิภาพในการใช้งานดีขึ้นมากกว่า WSL version แรกอย่างมาก
ส่วนรายละเอียด และการติดตั้งสามารถไปอ่านบทความภาษาไทย จากที่พี่ป้องกันได้เคยเขียนไว้
[บันทึก]การติดตั้ง WSL 2, Docker Desktop บน Windows 10 Home
เพราะบทความนี้เราจะเน้นไปที่การใช้งานคำสั่ง Git พื้นฐานเป็นหลัก

เข้าเรื่องสักทีหลังจากเกริ่นมานาน
อย่างแรกเลย เราต้องไปที่ Directory หรือ Folder
ที่เราต้องการจะทำ Version Control เสียก่อน
ด้วย Command line tool ของเรา

Init

git init คือ การเริ่มสร้าง Git repository ขึ้นมา
เป็นการทำให้ Directory นี้ และ Subdirectory สามารถใช้ Command ต่าง ๆ ของ Git ได้

~$git init

git init

Status

git status คือ การเช็คสถานะไฟล์ต่าง ๆ ที่อยู่ใน Git repository ของเรา

~$git status

แต่ตอนนี้ repository ของเราว่างเปล่า เราต้องสร้างไฟล์มาก่อน
ตัวอย่างนี้ผมจะสร้างไฟล์ชื่อ test
ในไฟล์เขียนไว้ว่า Hello world นะครับ

git status

จะเห็นว่าไฟล์ test ของเรานั้นอยู่ในกลุ่มของสถานะ Untracked files

ตรงนี้อาจจะมีหลายคนเริ่มสงสัยล่ะว่ามันคืออะไร
งั้นผมขอยกสถานะต่าง ๆ มีอะไรบ้างก่อนเลยแล้วกันครับ

  • Untracked คือสถานะที่ยังไม่ถูกติดตามโดย Git (ส่วนใหญ่เป็นสถานะของไฟล์ที่สร้างใหม่)
  • Staged คือสถานะที่พร้อมจะถูก Commit
  • Unstaged คือสถานะของไฟล์ที่ถูกติดตามแล้ว ซึ่งถูกแก้ไขเพิ่ม แต่ยังไม่ได้เตรียม Commit
  • Deleted คือสถานะของไฟล์ที่ถูกลบออก

Add

git add คือ การเปลี่ยนให้ไฟล์ของเราถูกติดตามด้วย Git
กรณีที่ไฟล์ของเราอยู่ในสถานะ Untracked
หรือหากสถานะไฟล์ของเราอยู่ใน Unstaged ก็จะถูกเปลี่ยนเป็น Staged ให้
จริง ๆ แล้วเราสามารถเลือกแค่บางส่วนของไฟล์ที่ต้องการจะ Staged ได้
หรือสามารถเลือกไฟล์ทั้ง Directory ที่ต้องการก็ได้
แต่เพื่อความเข้าใจง่ายจึงเลือกทั้งไฟล์ไปก่อนครับ

~$git add <file_name>

git add และเมื่อ git status ดูอีกครั้งจะเห็นว่าไฟล์ test ของเราอยู่ในสถานะ Staged เรียบร้อยแล้ว

Commit

git commit อธิบายง่าย ๆ คือ การทำ Checkpoint เป็นประวัติให้กับ Repository
เราสามารถย้อนกลับมาดูว่าทำอะไรไปบ้าง หรือทำการย้อน Commit หรืออะไรต่าง ๆ ได้มากมาย
เราจะไม่ลงลึกมากครับ เพราะเดี๋ยวจะยืดยาว และเบื่อหน่ายกันไปเสียก่อน

~$git commit

git commit

เมื่อเรากดยืนยันคำสั่งด้วยปุ่ม Enter Git จะให้เราเขียน Commit message
ด้วยโปรแกรม Text editor ที่เป็น Default
ซึ่งคุณผู้อ่านสามารถเปลี่ยน Default text editor ได้เองครับ

git commit message

ตรงนี้จะให้เขียนเตือนความจำเราว่าทำอะไรไปบ้างใน Commit นี้

git commit success

เมื่อทำการเซฟ และออกจาก Text editor จะมีผลสรุปให้
ว่าเราทำการเปลี่ยนแปลงอะไรไปบ้างใน Commit นี้

Log

git log คือ การแสดงประวัติของ Repository ที่ผ่านมา

~$git log

git log

Diff

git diff มีไว้สำหรับตรวจสอบความเปลี่ยนแปลงของไฟล์ที่ติดตามอยู่
ให้ดูที่สี หรือดูเครื่องหมาย +, - หน้าบรรทัดก็ได้
สีเขียว หรือ + หมายความว่าไฟล์มีการเพิ่มบรรทัดนี้เข้ามาใหม่จากที่ Staged เอาไว้
สีแดง หรือ - หมายความว่าไฟล์มีการลบบรรทัดนี้จากที่ Staged เอาไว้

~$git diff

ตัวอย่างนี้ผมจะแก้ไฟล์ test ของเรา
จากของเดิมในไฟล์เขียนไว้ว่า
Hello world นะครับ เป็น Test changed

git diff

โดยจะเห็นว่ามีการลบบรรทัดเดิม คือ Hello world เป็น Test changed

Checkout

git checkout คำสั่งนี้มีความสามารถ 2 อย่าง
อย่างแรก คือ สลับกิ่ง หรือ Branch (ตอนนี้ขอยังไม่กล่าวถึงนะครับ)
อย่างที่สอง คือ ยกเลิกการเปลี่ยนแปลงของไฟล์
และตอนนี้เราจะสนใจที่การยกเลิกการเปลี่ยนแปลงของไฟล์

~$git checkout <file_name>

git checkout

ต่อจากเดิมที่เราได้ทำการแก้ไขไฟล์ test ไปก่อนหน้านี้แล้ว
จะเห็นได้ว่าเมื่อเรา Checkout ไฟล์ test แล้ว
เป็นการยกเลิกการเปลี่ยนแปลงของไฟล์ test กลับไปเป็นเหมือนเดิม



คำสั่งก่อนหน้านี้ทั้งหมดนั้น จะทำงานอยู่บนเครื่องเราเพียงเครื่องเดียวเท่านั้น
ซึ่งจะเรียกว่า local หากต้องการทำงานร่วมกับผู้อื่น
หรือให้ออนไลน์ได้มักจะต้องทำการฝากไว้ที่ผู้ให้บริการ Git Hosting
เช่น GitHub, Bitbucket, GitLab เป็นต้น ซึ่งเราจะเรียกว่า Remote

Remote

git remote คำสั่งนี้ไว้สำหรับจัดการ Repository ที่ติดตามทั้งหมด
ก่อนหน้านี้หากได้ทำตามทั้งหมดแล้ว สามารถเอา Repository ของเราขึ้น Remote ได้
เพื่อเป็นการสำรองงานไว้บน Server และสามารถแชร์กับผู้อื่นได้
โดยให้ทำการสมัคร Account และสร้าง Repository
จากผู้ให้บริการ Git Hosting ให้เรียบร้อยเสียก่อน
ตอนนี้เราจะใช้คำสั่ง git remote add เพื่อให้ Repository
ของเรารู้ว่า Sync กับ Remote ไหนอยู่บ้าง

~$git remote add <name> <url>

git remote add

คุณผู้อ่านจะต้องเอา url ของตัวเองนะครับ url นี้แค่ตัวอย่างเท่านั้น

หากต้องการตรวจสอบว่าสำเร็จหรือไม่ ให้ใช้คำสั่ง git remote -v
ไว้สำหรับโชว์ Remote ที่ติดตามอยู่

~$git remote -v\

git remote -v

Push

git push คำสั่งนี้ไว้สำหรับเอางานเราขึ้น Remote repository

~$git push

git push

Clone

git clone คำสั่งนี้ไว้สำหรับติดตั้ง Repository เดิมจาก Remote ที่มีอยู่ก่อนแล้ว

~$git clone <url>

git clone

คุณผู้อ่านสามารถลอง Clone project ของผมได้เลยครับ

~$git clone https://github.com/Eji4h/Git-command-sample

Pull

git pull คำสั่งนี้ไว้สำหรับ Update repository ใน Local ของเรา จาก Remote
(คำสั่งนี้ผมขอข้าม ไม่ทำตัวอย่างให้ดูนะครับ)

~$git pull

Help

จากคำสั่งที่ยกมาก็เป็นคำสั่งพื้นฐานสำหรับการใช้งาน Git เบื้องต้นเพียงเท่านั้น
ยังเพียงพอแค่สำหรับทำงานคนเดียว
คำสั่งแต่ละคำสั่งมี Option มากมาย
เราสามารถใช้คำสั่ง —help ในการถามว่าคำสั่งที่เราสนใจอยู่นั้นมีรายละเอียดอย่างไรบ้าง

~$git --help

git --help

รู้สึกว่าบทความนี้ค่อนข้างจะยาวเลย ไว้เจอกันครั้งหน้าครับ

Reference: [Racap] เดี๋ยวนี้ใครๆก็ใช้ Git กันแล้ว น้องๆรู้ก่อนได้เปรียบนะเออ


Written by Yosapol Jitrak, Who is interested in game development, FinTech, technology, agile and DevOps culture. Follow me on Facebook