Git จากติดตั้งจนเป็นงาน

Sutthipong Nuanma
Amiearth
Published in
6 min readMar 24, 2019

ขอพูดนิดนึง ผมพึ่งรู้จัก git ได้สมัย 2 ปีที่แล้ว สมัยที่พึ่งหัดเขียน พวก html css php sql ใหม่ๆ มีงานที่ต้องส่งอาจารย์โห๋ตอนนั้นนี้รีบ Build Project มาเป็นเดือน เพื่อที่จะให้เสร็จและสบายที่หลัง แต่สุดท้ายปัญหามันก็เกิดกับผม แทบร้องไห้เมื่อก่อนส่งงานหนึ่งวัน harddisk ดันพังสะได้ Oh god ปั่นวันเดียวเอาจนเสร็จ จากโปรเจคที่ทำไว้ดีก็ต้องเป็นโปรเจคที่ทำผ่านๆ ตั้งแต่นั้นก็เริ่มหา tool มาช่วยจนมาเจอ เจ้า git เหมือนเป็นสิ่งที่ฟ้าประทานให้ผมชัดๆ

Git คือ ?

Version Control แบบ Distributed ตัวหนึ่ง เป็นระบบที่ใช้จัดเก็บและควบคุมการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์ชนิดใดก็ได้

Version control คืออะไร และทำไมคุณถึงต้องแคร์? Version control คือ ระบบที่จัดเก็บการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์หนึ่งหรือหลายไฟล์เพื่อที่คุณสามารถเรียกเวอร์ชั่นใดเวอร์ชั่นหนึ่งกลับมาดูเมื่อไรก็ได้ หนังสือเล่มนี้จะยกตัวอย่างจากไฟล์ที่เป็นซอร์สโค้ดของซอฟต์แวร์ แต่ขอให้เข้าใจว่าจริง ๆ แล้วคุณสามารถใช้ version control กับไฟล์ชนิดใดก็ได้ถ้าคุณเป็นนักออกแบบกราฟฟิคหรือเว็บดีไซเนอร์และต้องการเก็บทุกเวอร์ชั่นของรูปภาพหรือเลย์เอาต์ (ซึ่งคุณน่าจะอยากเก็บอยู่) การใช้ Version Control System (VCS) เป็นสิ่งที่ชาญฉลาดมาก เพราะมันช่วยให้คุณสามารถย้อนไฟล์บางไฟล์หรือแม้กระทั่งทั้งโปรเจคกลับไปเป็นเวอร์ชั่นเก่าได้ นอกจากนั้นระบบ VCS ยังจะช่วยให้คุณเปรียบเทียบการแก้ไขที่เกิดขึ้นในอดีต ดูว่าใครเป็นคนแก้ไขคนสุดท้ายที่อาจทำให้เกิดปัญหา แก้ไขเมื่อไร ฯลฯ และยังช่วยให้คุณสามารถกู้คืนไฟล์ที่คุณลบหรือทำเสียโดยไม่ตั้งใจได้อย่างง่ายดายform git-scm.com

แล้วทำไมเราถึงต้องใช้ git

  • Source Code ไม่มีวันหาย ย้อนกลับได้ตลอดเวลา
  • ช่วยให้เวลาพัฒนางานเป็น team เป็นไปอย่างง่ายขึ้น
  • สามารถดูได้ว่าส่วนไหนใครเป็นคนทำ
  • สามารถทำงานรวมกันผ่าน Git Hosting ได้ (ตัวนี้ตอบโจทย์มาก)

ติดตั้ง Git ไว้ในเครื้องกันก่อน

Linux (Debuan)

$ sudo apt-get install git

Linux ( Fedora )

$ sudo yuminstall git

Mac

https://git-scm.com/download/mac

Windows

https://git-scm.com/download/win

ขั้นตอนการติดตั้งคงไม่ต้องสอนเนาะ น่าจะทำเป็นกันทุกคนนะครับ และเมื่อติดตั้งลงเครื่องเสร็จเรียบร้อยให้ลองเข้า Command line หรือ Terminal แล้วพิมพ์คำสั่ง

git —-version

ถ้าขึ้น Version ก็ถือว่าติดตั้งเรียบร้อย

คำสั่งที่ใช้บ่อย

ทุกคำสั่งเราจะสามารถ run ใน Command line หรือ Terminal ได้เลยนะ

git config

git config เป็นคำสั่งที่ใช้ไว้สำหรับกำหนดข้อมูลผู้ใช้เพื่อระบุ ตัวตน ของ git

$ git config --global user.name "Amiearth"           #กำหนดชื่อผู้ใช้
$ git config --global user.email "example@mail.com" #กำหนดอีเมล์ของผู้ใช้
$ git config --global --list #ตรวจสองอีกครั้งหลังจากกำหนดค่าเสร็จแล้ว

git init

git init คำสั่งนี้จะเป็นคำสั้งใช้สำหรับสร้าง Folder ชื่อว่า .git ขึ้นมาซึ่งตัวนี้จะเอาไว้เก็บ git repository เปล่าๆ ที่ยังไม่ได้มีอะไร เพื่อสร้างมาไว้สำรองข้อมูลเก็บไว้

.git เป็น Folder ที่จะถูกซ้อนอยู่ถ้าหาไม่เจอก็ไม่แปลก ก็ไปทำการเปิดให้แสดง Folder Hidden สะ

repository เป็นที่เก็บข้อมูล มองง่ายๆ คล้าย Folder เพื่อเอา project เราไปเก็บนั้นเอง

$ git init

git add

git add เมื่อกี้เราได้สร้าง Folder .git ขึ้นมาแล้ว เราจะทำการเปลี่ยนแปลงสถานะ File ที่เรา add ให้เป็นสถานะ Staged

$ git add <file_name>
$ git add index.html #เพิ่มไฟล์ชื่อ README.md เข้าไปที่สถานะ Staged
$ git add . #ใช้ในกรณีที่ใช้สำหรับเพิ่ม File ทั้งหมด

git status

git status จากที่เราได้เพิ่ม File แล้วเราจะรู้ได้ยังไงว่าเราเพิ่ม File อะไรเข้าไปเป็นสถานะ Staged บ่าง เราจะใช้คำสั่ง git status เพื่อที่จะดูสถานะของแต่ละ File ว่าได้ถูก เพิ่มไปหรือยัง

git status
เมื่อเราพิมพ์ git status in terminal

git rm

git rm เราได้พูดถึง git add ที่เปลี่ยน status file ให้เป็น Staged แล้วเราก็จะมาเรียนรู้เรื่องการทำ Unstaged กันบ่าง ใช้คำสั่ง git rmซึ่งถ้าชื่อเต็มก็คือ git remove นั้นแหละ แต่ concept มันก็คล้าย git add นั้นแหละ คือ git rm ก็คือไม่ได้ลบ file แต่แค่เปลียนสถานะให้เป็น unstaged เหมือนเดิมแค่นั้นเอง

# git unstaged เฉพาะ file
$ git rm --cached < file >
# Unstaged all$ git reset --hard HEAD
$ git clean -f -d
$ git checkout master
$ git fetch origin master
$ git reset --hard origin/master
$ git pull
$ git submodule update
$ git submodule update --init --recursive
$ git submodule foreach git reset --hard HEAD
$ git submodule foreach git clean -f -d
$ git submodule foreach git submodule update --init --recursive
$ git submodule foreach git fetch
$ git submodule foreach git pull

git commit

git commit เป็นการยืนยัน File ของเราที่เราทำการแปลงเป็น สถานะ Staged เพื่อที่จะเอาไปเก็บ Backup ไว้ใน Local Repository

git commit มีประโยชน์มาก เพราะเวลาเรา commit code backup ไว้เราจะต้องตั้งชื่อ commit ไว้ด้วย เพื่อเวลาเราต้องการกลับมาใช้ code ชุดจะได้ กลับมาใช้ตามชื่อ log ที่ได้เขียนไว้

ซึ่งการใช้งานก็ไม่ยากเลย

$git commit -m "message"          #ยืนยันการเปลี่ยนแปลงพร้อมข้อความ
$git commit -am "message" #เพิ่มการเปลี่ยนแปลงและยืนยันพร้อมข้อความ
$git commit #เพิ่มข้อความในโปรแกรม vi
#ยืนยันการเปลี่ยนแปลงพร้อมข้อความและ merge ลงใน commit ล่าสุด
$git commit --amend -m "message"

ของแถม

git log

git log สำหรับดูประวัติเปลี่ยนแปลง บน local repository ว่า มีใครทำอะไรบ้าง
ในช่วงเวลาไหนมีเหตุการณ์อะไรเกิดขึ้นบ้างแต่ละการเปลี่ยนแปลงอะไรไป

$git log
$git log --oneline
$git log --oneline --decorate
$git log --oneline --decorate --graph
$git log --stat # Diff from log
$git log --grep="Message" # Log by message
$git log --after="2017-2-14" # Log in date
$git log --before="2017-2-14" # Log in date
$git log --author=pakin # Log by user

git remote

git remote ขึ้นตอนนี้เราจะทำงานผ่าน git hosting ตัวอย่างนี้ผมจะใช้ github ละกัน ก่อนอื่น ต้องไปสมัคร Account github กันก่อน สมัครอะไรเสร็จแล้ว

เราจะมาสร้าง Repository ไว้ใน github กัน

  1. เราก็ไปสร้างชื่อของ Repository ของเราไว้ใน github ก่อนผมจะตั้งชื่อว่า test_git
  2. แล้วก็ทำการ Create repository เลย

เมื่อสร้างเรียบร้อยก็จะมี คำสั่งมาไว้พร้องหมดแล้วแต่ผมยังไม่มี Project นะสิ เดียวไปสร้าง Project แปปนึง

เดียวเราจะทำการสร้าง File ที่มีชื่อว่า index.html ไว้ใน Folder นี้

touch index.html

และจากนั้นก็จะเอาตัว file นี้ไปเปิดใน text editor แล้วใส่ข้อความว่า Hello world แบบนี้

** อย่าลืม Save ด้วยนะท่านๆ

จากนั้นเราต้องทำ git init เพื่อสร้าง local repository บน project เรา

ผมจะข้ามขั้นตอน git config ไปเลยนะ เพราะผมเคยทำไปแล้ว

เมื่อเรา git init เสร็จเรียบร้อยเราจะได้ Folder ที่ซ้อนอยู่ชื่อ .git เพื่อเก็บ local Repository

จากนั้น เราจะทำการ add file index.html ให้เป็น Staged

แล้วเราจะมาลอง ตรวจดูว่า git add เราได้ไหม ก็ไปใช้ git status ดู

ผมจะไม่ remove อะไร นะ ก็จะทำการ commit code ไปเลย โดยผมจะตั้งชื่อประวัติ commit ว่า first project ก่อนละกัน

จากนั้นเราจะทำ repository ให้มันเชื่อมกับ git hosting

$ git remote add origin <URL> #เพิ่ม Remote Repository ชื่อ origin$ git remote add origin https://github.com/earth774/test_git.git#เพิ่ม Remote Repository ใหม่ชื่อ origin
$ git remote set-url origin <New URL>
$ git remote -v #แสดง Remote Repository
$ git config --list #แสดงคุณสมบัติต่างๆของ Git ซึ่งจะมี Remote Repository แสดงออกมาด้วย

เราเราสามารถตรวจสอบได้ว่า git ของเรา remote ไปยังไหนได้

git push

git push เป็นการ upload source code ที่เราได้ stage ที่ commit ไปแล้ว จาก Local Repository นำขึ้นไปอยู่ใน Remote Repository ซึ่งก็คือที่เราสร้าง อยู่บน github นั้นเอง

$ git push origin master
$ git push -u origin master

เราจะทำการ push ไปยัง remote ชื่อว่า origin แล้ว Branch ที่มีชื่อว่า master

สำหรับบางคนอาจจะมี pop up login github ขึ้นมาเพื่อที่จะทำการ เข้าสู่ระบบนั้นเราก็จะเอารหัสที่เราเข้าใช้เข้าสู่ระบบ github นั้นแหละ ใส่เข้าไป

จากนั้นลองกลับมา โหลดหน้า github ที่เราได้สร้าง repository ใหม่อีกที

Code เราก็ อยู่บน git host เรียบร้อย

git fetch

git fetch เป็นคำสั่งที่เอาข้อมูลล่าสุดที่อยู่บน Remote Repository ของเราลงมายัง Local Repository จะยังไม่ได้ Merge code จาก Remote Repository ลงมานะ

# รับการเปลี่ยนแปลงทุก Branch จาก Remote Repository
$ git fetch --all
# รับการเปลี่ยนแปลง Branch master จาก Remote Repository ที่ชื่อ origin
$ git fetch origin master
# แต่ทุกทีผมอยู่ไหน Branch ไหน ก็ใช้แค่คำสั่ง สั้นๆ ก็พอ
$ git fetch

git pull

git pull เป็นคำสั่งที่เอาข้อมูลล่าสุดที่อยู่บน Remote Repository ของเราลงมายัง Local Repository แต่จะทำการ Merge code จาก Remote Repository ของเรามาลงใน Local

# แต่ทุกทีผมอยู่ไหน Branch ไหน ก็ใช้แค่คำสั่ง สั้นๆ ก็พอ
$ git pull
# รับการเปลี่ยนแปลง Branch master จาก Remote Repository ที่ชื่อ origin
$ git pull origin master

git clone

git clone เป็นคำสั่งที่จะเป็นคำสั้งที่ใช้สำหรับ Download Source code ที่เราเอาไปเก็บไว้บน git host มาลงไว้ในเครื่องของเรา คำสั้งนี้จะคุณหูคุณตากันมากสำหรับสายที่ชอบไปโหลด code คนอื่นมาลอง run ดู

$ git clone <...url...>$ git clone https://github.com/earth774/test_git.git

สรุป

ทั้งหมดในเนื่อหานี้เท่านี้น่าถือว่าพอใช้งานกันได้ เพราะ Blog นี้ผมอาจจะไม่ได้ลงรายละเอียกทุกคำสั้งของ git มาทั้งหมด เพราะอยากให้เห็นภาพเบื่องต้นว่ามันเอาไปใช้ยังไง แล้วทำไรได้บ้าง เดียวถ้าว่าๆ เดียวจะมาเขียนเรื่องการแตก สาขา หรือ branch เพื่อให้การทำงานเป็น team เป็นไปอย่างง่ายมากขึ้นนั้นเอง

ถ้าใครมีคำสั้งพื้นฐานที่ควรต้องรู้หรือเขียนผิดพลาดยังไงสามารถแนะนำกันเข้ามาได้ 😀😀😀😀😀😀😀

--

--

Sutthipong Nuanma
Amiearth

โปรแกรมเมอร์คนนึงในจังหวัดพะเยา