git - ก้าวแรกสู่สังเวียน

เริ่มต้นการใช้งาน git อย่างง่ายๆ เหมือนการนับ 1 2 3 ;)

Tweet

โดย Roger Dudler
ร่วมด้วย @tfnico, @fhd และ Namics
ภาษาอื่นๆ deutsch, español, français, italiano, nederlands, português, русский, türkçe,
မြန်မာ, 日本語, 中文, 한국어 Vietnamese ภาษาไทย
กรุณาแจ้งปัญหาต่างๆ ได้ที่ github

Frontify - Collaboration for Web Designers & Front-End Developers

การติดตั้ง

Download git for OSX

Download git for Windows

Download git for Linux

สร้าง repository ใหม่

ให้ทำการสร้าง directory ใหม่ขึ้นมา จากนั้นย้ายเข้าไป เพื่อสร้าง repository ด้วยคำสั่ง
git init

checkout a repository

ทำการดึงข้อมูลจาก repository ที่อยู่บนเครื่องของเรา ด้วยคำสั่ง
git clone /path/to/repository
แต่ถ้าต้องการดึงข้อมูลจาก repository จากเครื่องอื่น ด้วยคำสั่ง
git clone username@host:/path/to/repository

workflow

ใน git repository มีโครงสร้างในรูปแบบ tree ประกอบไปด้วย 3 ส่วน คือ
1. Working Directory คือ ที่จัดเก็บไฟล์จริงๆ
2. Index คือ ตัวบอกสถานะของพื้นที่การทำงาน
3. HEAD คือ ตัวบอกว่า จุดที่ทำการ commit ล่าสุด อยู่ที่ไหน

add & commit

คุณสามารถเสนอการเปลี่ยนแปลง เข้าไป Index ด้วยการใช้คำสั่ง
git add <ชื่อไฟล์>
git add *
ซึ่งเป็นขั้นตอนแรกสำหรับการใช้งาน git พื้นฐาน
และยอมรับการเปลี่ยนแปลง ด้วยคำสั่ง
git commit -m "ข้อความอธิบายการเปลี่ยนแปลง"
ในตอนนี้ เราได้ทำการบันทึกการเปลี่ยนแปลงไปที่ HEAD แล้ว แต่ยังอยู่ที่ local repository เท่านั้น ยังไม่เก็บใน remote repository

pushing changes

ตอนนี้การเปลี่ยนแปลงล่าสุดอยู่ที่ HEAD ของ local repository แล้ว
ต่อไปจะทำการส่งการเปลี่ยนแปลงเหล่านี้ ไปยัง remote repository ด้วยคำสั่ง
git push origin master
สามารถทำการเปลี่ยน master เป็นชื่อ branch ที่คุณต้องการได้

แต่ถ้าคุณไม่ได้ทำการ clone หรือเชื่อมต่อไปยัง remote repository
สามารถทำการเพิ่ม remote ด้วยคำสั่งดังนี้
git remote add origin <server>
เพียงเท่านี้ คุณก็สามารถส่งการเปลี่ยนแปลงไปยัง remote repository ได้แล้ว

branching

Branch นั้นถูกใช้เพื่อแยกการพัฒนาความสามารถใหม่ๆ ออกมาจากส่วนหลัก โดยที่ git มี master branch มาให้อยู่แล้ว หลังจากทำการสร้าง git repository ขึ้นมา

ในการใช้ branch เพื่อแยกการพัฒนานั้น จะต้องทำการ merge การเปลี่ยนแปลงเข้ามายัง master branch หลังจากที่พัฒนาเสร็จแล้วเสมอ

คำสั่งสร้าง branch ชื่อว่า "feature_x" และเปลี่ยนไปยัง branch ที่สร้างทันที
git checkout -b feature_x
คำสั่งย้ายกลับมายัง master branch
git checkout master
คำสั่งลบ branch
git branch -d feature_x
ตอนนี้ branch ชื่อว่า "feature_x" ถูกลบไปแล้ว

คำสั่งเพื่อส่งการเปลี่ยนแปลงของ branch ที่ต้องการไปยัง remote repository
git push origin <branch>

update & merge

คุณสามารถดึงการเปลี่ยนแปลงล่าสุดจาก remote repository มายัง local repository ด้วยคำสั่ง
git pull
โดย git จะทำการ ดึงข้อมูล และ รวมข้อมูล การเปลี่ยนแปลงจาก remote repository ในเครื่องของคุณ

ถ้าต้องการ merge การเปลี่ยนแปลงจาก branch อื่น
มายัง branch ปัจจุบัน (เช่น master) ด้วยคำสั่ง
git merge <branch>
ซึ่งทั้งสองคำสั่ง ทำการ merge อย่างอัตโนมัติ

แต่ถ้าโชคร้าย อาจจะเกิด conflict หรือข้อขัดแย้งของการเปลี่ยนแปลง ดังนั้น คุณจะต้องทำการแก้ไขข้อขัดแย้งเหล่านั้นด้วยตัวเอง
ต่อจากนั้นให้ทำการบันทึกการเปลี่ยนแปลงด้วยคำสั่ง
git add <filename>
แต่ก่อนที่จะ merge การเปลี่ยนแปลง สามารถตรวจสอบความแตกต่างของสิ่งที่แก้ไข ด้วยคำสั่ง
git diff <source_branch> <target_branch>

tagging

ก่อนที่จะทำการ release ระบบออกไปนั้น แนะนำให้ทำการสร้าง tag หรือ ป้ายชื่อ เพื่อบอกให้รู้ว่าเรากำลังทำอะไร อยู่ตรงไหน
ทำการสร้าง tag ชื่อว่า 1.0.0 ด้วยคำสั่ง
git tag 1.0.0 1b2e1d63ff

1b2e1d63ff คือ รหัสย่อ 10 หลักของการเปลี่ยนแปลง
เพื่อใช้อ้างอิงถึงจุดที่เราต้องการสร้าง tag
โดยสามารถดูข้อมูลของประวัติการเปลี่ยนแปลงได้ในส่วนต่อไป

log

สามารถดูประวัติการเปลี่ยนแปลงใน git repository ด้วยคำสั่ง
git log
โดยที่คุณสามารถใส่ parameter ต่างๆ เพื่อดูประวัติในรูปแบบที่ต้องการ
เช่น

แสดงข้อมูลการเปลี่ยนแปลงตามชื่อผู้ใช้งาน
git log --author=bob
แสดงข้อมูลแต่ละการเปลี่ยนแปลงใน 1 บรรทัด
git log --pretty=oneline
แสดงข้อมูลการเปลี่ยนแปลงในรูปแบบของ tree จาก branch และ tag ทั้งหมด
git log --graph --oneline --decorate --all
แสดงข้อมูลเฉพาะไฟล์ที่ทำการเปลี่ยนแปลงเท่านั้น
git log --name-status
สามารถดูข้อมูลเพิ่มเติม สำหรับ parameter ต่างๆ ด้วยคำสั่ง
git log --help

replace local changes

ในกรณีที่คุณทำบางสิ่งผิดพลาดไป สามารถแก้ไขที่ local repository ด้วยคำสั่ง
git checkout -- <filename>
git จะทำการแทนที่ข้อมูล ด้วยการเปลี่ยนแปลงล่าสุดใน HEAD และการเปลี่ยนแปลงนี้จะถูกเพิ่มเข้าไปใน index เรียบร้อย
แต่ถ้าเป็นไฟล์ใหม่ จะไม่ถูกลบทิ้ง

ถ้าคุณต้องการยกเลิกการเปลี่ยนแปลงทั้งหมดใน local repository แล้ว
ให้ทำการดึงข้อมูลล่าสุดมาจาก remote repository และ ทำการ reset สถานะของ master branch ใน local repository ด้วยคำสั่ง
git fetch origin
git reset --hard origin/master

ข้อมูลดีๆ มีประโยชน์

git มีเครื่องมือที่เป็น GUI มาให้
gitk
เพิ่มสีสันให้การแสดงผล
git config color.ui true
กำหนดให้แต่ละประวัติการเปลี่ยนแปลงแสดงเพียง 1 บรรทัด
git config format.pretty oneline
ทำการบันทึกการเปลี่ยนแปลงในรูปแบบ interative ผ่าน command line
git add -i

แหล่งข้อมูลเพิ่มเติม

Git client ดีๆ สำหรับคนที่ต้องการ GUI

แหล่งความรู้ดีๆ

ถ้าต้องการความช่วยเหลือ

คำแนะนำและความคิดเห็น