Git คืออะไร — คู่มือ Version Control สำหรับ Developer และ DevOps 2026

Git คืออะไร — คู่มือ Version Control สำหรับ Developer และ DevOps 2026

โดย อ.บอม (SiamCafe Admin) | 04/03/2026 | Programming | 1,166+ คำ

Git คืออะไร — ระบบ Version Control ที่ Developer ทุกู้คืนต้องใช้

เคยเจอปัญหา code พังแล้วไม่รู้จะกลับไปเวอร์ชันไหนไหมครับ? ผมเจอมาแล้วหลายครั้งตอนทำงานในทีมใหญ่ ไฟล์ถูกเขียนทับ branch ชนกัน merge แล้วระบบพัง นั่นคือเหตุผลที่ Git เป็นเครื่องมือที่ขาดไม่ได้ในปี 2026

Git เป็น Distributed Version Control System (DVCS) ที่ถูกสร้างโดย Linus Torvalds ผู้สร้าง Linux ในปี 2005 เพื่อจัดการ source code ของ Linux Kernel หลักการสำคัญของ Git คือทุกู้คืนในทีมจะมี repository เต็มรูปแบบอยู่ในเครื่องของตัวเอง ไม่ต้องพึ่ง server ตลอดเวลา ทำให้ทำงานได้เร็วและยืดหยุ่นกว่า SVN หรือ CVS แบบเดิม

ความแตกต่างสำคัญระหว่าง Git กับ Version Control รุ่นเก่าคือ Git เก็บ snapshot ของไฟล์ทั้งหมดในแต่ละ commit ไม่ใช่แค่ diff ทำให้การ checkout branch หรือ revert กลับไปเวอร์ชันก่อนหน้าทำได้เร็วมาก แม้ project จะมีหลายหมื่น commit ก็ยังทำงานได้ลื่นไหล

ติดตั้ง Git บนทุก OS — Ubuntu, CentOS, macOS, Windows

การติดตั้ง Git ทำได้ง่ายมากบนทุกแพลตฟอร์ม ลองดูตามระบบที่ใช้ครับ

Ubuntu / Debian

sudo apt update
sudo apt install git -y
git --version

CentOS / RHEL

sudo yum install git -y
# หรือบน RHEL 8+
sudo dnf install git -y

macOS

# ผ่าน Homebrew
brew install git

# หรือใช้ Xcode Command Line Tools
xcode-select --install

Windows

ดาวน์โหลด installer จาก https://git-scm.com/download/win แล้วติดตั้งตามปกติ แนะนำให้เลือก Git Bash เป็น terminal เริ่มต้น เพราะรองรับคำสั่ง Linux ได้ดี หรือจะใช้ winget install Git.Git บน Windows 11 ก็ได้

ตั้งค่าเริ่มต้นหลังติดตั้ง

git config --global user.name "ชื่อของคุณ"
git config --global user.email "email@example.com"
git config --global init.defaultBranch main
git config --global core.autocrlf input
git config --global pull.rebase false
git config --list

คำสั่ง Git พื้นฐานที่ใช้ทุกวัน

จากประสบการณ์ทำงานกับทีม Development มากว่า 20 ปี คำสั่งเหล่านี้คือสิ่งที่ผมใช้แทบทุกวัน ลองทำตามไปทีละขั้นครับ

สร้าง Repository ใหม่

# สร้าง repo ใหม่
mkdir my-project && cd my-project
git init

# หรือ clone จาก remote
git clone https://github.com/username/repo.git
git clone git@github.com:username/repo.git  # ผ่าน SSH (แนะนำ)

วงจรการทำงานหลัก: add, commit, push

# ดูสถานะไฟล์
git status

# เพิ่มไฟล์เข้า staging area
git add filename.py
git add .                # เพิ่มทุกไฟล์ที่เปลี่ยน

# Commit พร้อมข้อความ
git commit -m "feat: เพิ่มฟีเจอร์ login ด้วย JWT"

# Push ไป remote repository
git push origin main

ดู History และ Diff

# ดู log แบบสั้นกระชับ
git log --oneline --graph --all -20

# ดูความเปลี่ยนแปลงที่ยังไม่ stage
git diff

# ดูความเปลี่ยนแปลงที่ stage แล้ว
git diff --staged

# เปรียบเทียบ 2 commits
git diff HEAD~3..HEAD

Branch และ Merge — หัวใจของการทำงานเป็นทีม

Branch คือฟีเจอร์ที่ทำให้ Git แตกต่างจาก Version Control ตัวอื่นอย่างชัดเจน การสร้าง branch ใน Git เร็วมากเพราะมันแค่สร้าง pointer ใหม่ ไม่ได้ copy ไฟล์ทั้งหมดเหมือน SVN

Branching Strategy ที่นิยมในทีม DevOps

Strategyเหมาะกับข้อดี
Git FlowRelease-based มี version ชัดเจนแยก feature/release/hotfix ชัดเจน
GitHub FlowCI/CD deploy บ่อยเรียบง่าย มี branch หลักเดียว + PR
Trunk-Basedทีมใหญ่ที่ deploy ทุกวันลด conflict integrate เร็ว

ตัวอย่างการใช้ Branch

# สร้าง branch ใหม่จาก main
git checkout -b feature/user-auth

# ทำงาน แก้โค้ด commit ตามปกติ
git add .
git commit -m "feat: implement JWT authentication"

# กลับไป main แล้ว merge
git checkout main
git merge feature/user-auth

# ลบ branch ที่ merge แล้ว
git branch -d feature/user-auth

# Push branch ไป remote
git push origin feature/user-auth

แก้ Merge Conflict อย่างมืออาชีพ

Conflict เกิดเมื่อ 2 branch แก้ไฟล์เดียวกันในจุดเดียวกัน Git จะ mark ไว้ให้แบบนี้:

<<<<<<< HEAD
code จาก branch ปัจจุบันของคุณ
=======
code จาก branch ที่จะ merge เข้ามา
>>>>>>> feature/other-branch

วิธีแก้: เปิดไฟล์ เลือกว่าจะเอา code ส่วนไหน ลบ marker ออก แล้ว git add และ git commit ใหม่ ถ้าใช้ VS Code จะมี built-in merge editor ที่ช่วยเห็นภาพได้ชัดเจนมากครับ

Git ขั้นสูง — Rebase, Stash, Cherry-pick, Bisect

Rebase vs Merge — เลือกใช้ยังไง

Rebase เอาไว้จัดระเบียบ commit history ให้เป็นเส้นตรง ต่างจาก merge ที่จะสร้าง merge commit เพิ่มขึ้นมา

# Rebase feature branch ให้ทันสมัยกับ main
git checkout feature/api
git rebase main

# Interactive rebase — รวม commit หรือแก้ข้อความ
git rebase -i HEAD~5

กฎสำคัญ: ห้าม rebase branch ที่คนอื่นใช้ร่วมกัน (shared branch) เด็ดขาด ใช้กับ local branch ของตัวเองเท่านั้น

Stash — เก็บงานชั่วคราวเพื่อสลับไปทำงานอื่น

# เก็บงานที่ทำค้างไว้
git stash
git stash save "WIP: กำลังแก้ bug login page"

# ดูรายการ stash ทั้งหมด
git stash list

# เอากลับมาทำงานต่อ
git stash pop              # เอาอันล่าสุดกลับมา + ลบจาก stash
git stash apply stash@{2}  # เอาอันที่ระบุกลับมา แต่ไม่ลบจาก stash

Cherry-pick — เลือกเฉพาะ commit ที่ต้องการ

# เอา commit จาก branch อื่นมาใส่ branch ปัจจุบัน
git cherry-pick abc1234

# Cherry-pick หลาย commits พร้อมกัน
git cherry-pick abc1234 def5678

# Cherry-pick แบบไม่ commit ทันที (เอามา stage ก่อน)
git cherry-pick --no-commit abc1234

Bisect — หา commit ที่ทำให้ bug เกิด

# เริ่ม bisect
git bisect start
git bisect bad              # commit ปัจจุบันมี bug
git bisect good abc1234     # commit นี้ยังไม่มี bug

# Git จะ checkout commit ตรงกลาง ให้คุณทดสอบ
# ถ้ามี bug: git bisect bad
# ถ้าไม่มี: git bisect good
# ทำซ้ำจนเจอ commit ต้นเหตุ

git bisect reset  # กลับสู่สถานะปกติ

ตั้งค่า .gitignore และ Git Hooks

.gitignore ที่ครอบคลุม

# Python
__pycache__/
*.pyc
.env
venv/
*.egg-info/

# Node.js
node_modules/
dist/
.env.local
.next/

# IDE / Editor
.vscode/
.idea/
*.swp
*.swo

# OS Generated
.DS_Store
Thumbs.db
desktop.ini

# Build / Artifacts
*.log
*.tmp
coverage/

Git Hooks สำหรับ Automate QA

Git Hooks คือ script ที่รันอัตโนมัติเมื่อเกิด event เช่น pre-commit, pre-push ผมใช้ pre-commit hook ตรวจ code quality ทุกครั้งก่อน commit:

#!/bin/sh
# .git/hooks/pre-commit
echo "Running linter..."
python -m flake8 . --max-line-length=120
if [ $? -ne 0 ]; then
    echo "Lint failed! Fix errors before committing."
    exit 1
fi

echo "Running tests..."
python -m pytest tests/ -q
if [ $? -ne 0 ]; then
    echo "Tests failed! Fix before committing."
    exit 1
fi

สำหรับทีมที่ต้องการ setup hooks ง่ายๆ แนะนำใช้ Husky (Node.js) หรือ pre-commit (Python) ครับ

Case Study: ทีม 8 คนจัดการ Monorepo ด้วย Git อย่างมืออาชีพ

ปี 2025 ผมช่วยบริษัท Fintech แห่งหนึ่งจัดระเบียบ Git workflow ใหม่ทั้งหมด เดิมทุกู้คืน push ตรงไป main branch ไม่มี code review ผลคือ production พังเฉลี่ย 2 ครั้งต่อสัปดาห์ ลูกค้าร้องเรียนหนัก

สิ่งที่ปรับเปลี่ยน:

ผลลัพธ์หลังปรับ 3 เดือน: production incident ลดจาก 8 ครั้ง/เดือน เหลือ 1 ครั้ง/เดือน, release cycle เร็วขึ้น 3 เท่า, developer satisfaction สูงขึ้นอย่างเห็นได้ชัด

เครื่องมือที่ใช้คู่กับ Git ในปี 2026

เครื่องมือประเภทจุดเด่น
GitHubHosting + CI/CDใหญ่สุด มี Actions, Copilot, Projects
GitLabAll-in-one DevOpsSelf-hosted ได้ มี CI/CD ในตัว
BitbucketHostingคู่กับ Jira ของ Atlassian
GiteaSelf-hostedเบา เร็ว เขียนด้วย Go เหมาะ server ส่วนตัว
lazygitTUI Clientใช้ Git ผ่าน terminal แบบ visual สวยงาม
GitKrakenGUI ClientUI สวย เหมาะมือใหม่ที่ไม่ถนัด CLI

Git Security Best Practices

คำถามที่พบบ่อย (FAQ)

Q: Git กับ GitHub ต่างกันยังไง?

A: Git เป็นซอฟต์แวร์ version control ที่รันบนเครื่องคุณ ส่วน GitHub เป็นแพลตฟอร์ม hosting สำหรับ Git repository ที่เพิ่มฟีเจอร์ collaboration เข้ามา เช่น Pull Request, Issues, Actions, Projects

Q: ควรใช้ merge หรือ rebase ดี?

A: ใช้ merge สำหรับ feature branch ที่จะ merge เข้า main เพราะเก็บ history ได้ครบ ใช้ rebase สำหรับ update feature branch ของตัวเองให้ทันสมัยกับ main เพื่อให้ history สะอาดเป็นระเบียบ

Q: Commit message ที่ดีเขียนยังไง?

A: ใช้ Conventional Commits format เช่น feat: add user login API, fix: resolve null pointer in checkout ทำให้อ่าน history ง่าย generate changelog อัตโนมัติได้ และเพื่อนร่วมทีมเข้าใจทันที

Q: Commit ผิดแก้ยังไง?

A: ถ้ายังไม่ push ใช้ git commit --amend แก้ commit ล่าสุดได้เลย ถ้า push ไปแล้วใช้ git revert สร้าง commit ใหม่ที่ย้อนกลับ ห้ามใช้ force push บน shared branch เด็ดขาดเพราะจะทำให้คนอื่นในทีมมีปัญหา

Q: Git LFS คืออะไร ต้องใช้ตอนไหน?

A: Git Large File Storage สำหรับจัดการไฟล์ขนาดใหญ่ เช่น วิดีโอ, PSD, โมเดล AI ที่ไม่ควรเก็บใน repo ปกติ ใช้เมื่อมีไฟล์เกิน 50MB ที่ต้อง version control ป้องกัน repo บวมจนช้า

บทความแนะนำ: