← Writing

data-science · Vietnamese · 8 min

🇺🇸 Read in English

Git và GitHub: Công cụ không thể thiếu trong kỷ nguyên Vibe Coding

May 16, 2026

AI như Claude Code hay GitHub Copilot viết code ngày càng tốt. Nhưng chính vì thế, Git lại trở nên quan trọng hơn bao giờ hết — để bạn biết AI đã làm gì, và hoàn tác khi cần.

Vibe coding đang thay đổi cách chúng ta làm việc. Với sự hỗ trợ của Claude Code, GitHub Copilot hay Cursor, bạn có thể generate cả trăm dòng code chỉ bằng một câu prompt. Chất lượng code AI tạo ra ngày càng tốt — đủ để chạy được, đủ để ship được.

Nhưng có một vấn đề mới nảy sinh: bạn có thực sự biết AI vừa làm gì không?

Khi AI viết code thay bạn, việc review trở nên phức tạp hơn nhiều. Bạn không còn nhớ từng dòng được thêm vào khi nào, tại sao, và thay đổi gì so với lúc trước. Một session vibe coding 30 phút có thể tạo ra 500 dòng thay đổi trải rộng trên 10 file — không có Git, bạn gần như mù.

Đây là lý do Git và GitHub trở nên quan trọng hơn bao giờ hết trong kỷ nguyên AI-assisted coding: không phải để theo dõi bạn viết gì, mà để theo dõi AI đã làm gì với code của bạn.


Git hoạt động như thế nào

Git có 3 vùng bạn cần biết:

VùngVai tròLệnh liên quan
Working DirectoryNơi bạn (hoặc AI) đang sửa file(bạn đang ở đây)
Staging AreaChọn những thay đổi nào sẽ lưugit add
RepositoryLịch sử đã lưu, không mấtgit commit

Workflow cơ bản: chỉnh sửa file → git addgit commit. Đơn giản vậy thôi.


Những lệnh thực tế dùng hàng ngày

Bắt đầu

# Clone một repo về máy
git clone https://github.com/user/repo.git
 
# Hoặc khởi tạo repo mới từ folder hiện tại
git init

Kiểm tra trạng thái

# Xem file nào đang thay đổi
git status
 
# Xem chi tiết những gì đã thay đổi
git diff
 
# Xem lịch sử commit
git log --oneline

git statusgit diff là hai lệnh bạn nên chạy thường xuyên nhất khi làm việc với AI — trước khi commit, luôn kiểm tra AI đã thay đổi gì.

Lưu thay đổi

# Thêm tất cả thay đổi vào staging
git add .
 
# Hoặc chỉ thêm file cụ thể (thận trọng hơn)
git add src/main.py
 
# Lưu với message mô tả
git commit -m "feat: add user authentication"

Tip với vibe coding: Đừng commit cả session AI một lần. Hãy commit theo từng tính năng nhỏ để dễ review và dễ rollback nếu cần.

Làm việc với branch

Branch cho phép bạn thử nghiệm mà không ảnh hưởng code chính. Đây là thói quen đặc biệt quan trọng khi dùng AI — luôn để AI làm việc trên branch riêng.

# Tạo branch mới và chuyển sang
git checkout -b feature/ten-tinh-nang
 
# Xem đang ở branch nào
git branch
 
# Chuyển về branch main
git checkout main
 
# Merge branch vào main (sau khi đã review xong)
git merge feature/ten-tinh-nang
 
# Xóa branch sau khi merge
git branch -d feature/ten-tinh-nang

Đồng bộ với GitHub

# Đẩy code lên GitHub
git push origin main
 
# Kéo code mới nhất về
git pull origin main
 
# Kéo về nhưng không merge ngay (xem trước)
git fetch origin

Khi mọi thứ đổ bể — cách undo

Đây là phần quan trọng nhất khi làm việc với AI: biết cách hoàn tác.

Undo thay đổi chưa commit

# Bỏ thay đổi ở một file cụ thể (quay về lần commit cuối)
git checkout -- ten-file.py
 
# Bỏ tất cả thay đổi chưa commit (CẨN THẬN: không khôi phục được)
git checkout -- .

Undo commit vừa tạo

# Undo commit nhưng GIỮ LẠI thay đổi (an toàn nhất)
git reset --soft HEAD~1
 
# Undo commit và unstage thay đổi
git reset HEAD~1
 
# Undo commit và XÓA LUÔN thay đổi (nguy hiểm, mất code)
git reset --hard HEAD~1

Nguyên tắc: khi không chắc, dùng --soft. Bạn vẫn giữ được code, chỉ là bỏ commit đó.

Xem lịch sử để tìm điểm quay về

# Xem lịch sử ngắn gọn
git log --oneline
 
# Quay về một commit cụ thể (xem trước, không thay đổi gì)
git checkout abc1234
 
# Tạo branch mới từ một commit cũ
git checkout -b recovery-branch abc1234

Khi AI tạo ra một đống thay đổi mà bạn muốn bỏ hết, git log --oneline + git reset là combo cứu cánh.


Làm việc với GitHub — Pull Request workflow

GitHub là nơi lưu trữ code online và cộng tác với người khác. Pull Request (PR) là cơ chế để review code trước khi merge — đặc biệt hữu ích khi review code do AI viết.

Quy trình cơ bản

# 1. Tạo branch mới
git checkout -b feature/add-login
 
# 2. Code (hoặc để AI code)
# 3. Commit
git add .
git commit -m "feat: add login form"
 
# 4. Đẩy branch lên GitHub
git push origin feature/add-login
 
# 5. Vào GitHub, tạo Pull Request
# 6. Review code, merge nếu OK

Xem thay đổi giữa branch và main

# Xem những commit có trên feature branch mà main chưa có
git log main..feature/add-login --oneline
 
# Xem toàn bộ code diff
git diff main..feature/add-login

Đây là cách bạn review AI: trước khi merge, chạy git diff main..feature-branch để xem toàn bộ những gì AI đã thay đổi, từng dòng.


Git Flow — quy trình làm việc cho dự án thực tế

Git Flow là một mô hình phân nhánh được thiết kế cho các dự án có chu kỳ release rõ ràng. Thay vì làm việc trực tiếp trên main, Git Flow định nghĩa các loại branch với vai trò cụ thể.

Cấu trúc branch trong Git Flow

main          ← code đang chạy trên production
develop       ← nơi tích hợp tất cả tính năng mới
feature/*     ← phát triển từng tính năng
release/*     ← chuẩn bị cho một phiên bản mới
hotfix/*      ← vá lỗi khẩn cấp trực tiếp từ main

Vòng đời một tính năng mới

Bước 1: Tạo feature branch từ develop

git checkout develop
git pull origin develop          # đảm bảo develop đang mới nhất
git checkout -b feature/user-authentication

Bước 2: Phát triển tính năng

# Code (hoặc để AI code trên branch này)
git add .
git commit -m "feat: add login form"
git commit -m "feat: add JWT token handling"

Bước 3: Cập nhật thay đổi mới từ develop vào branch đang làm

Trong thực tế, khi bạn đang làm feature thì đồng đội (hoặc AI ở branch khác) vẫn đang merge code mới vào develop. Bạn cần đồng bộ những thay đổi đó về branch của mình để tránh conflict lớn khi merge sau này.

Có hai cách:

Cách 1 — Merge develop vào feature branch (đơn giản, an toàn hơn):

git checkout develop
git pull origin develop          # lấy thay đổi mới nhất về develop
 
git checkout feature/user-authentication
git merge develop                # đưa thay đổi của develop vào branch hiện tại
# giải quyết conflict nếu có, rồi commit

Cách 2 — Rebase feature branch lên đầu develop (lịch sử commit gọn hơn):

git checkout feature/user-authentication
git rebase develop               # "đặt lại" base của branch lên đầu develop
# giải quyết conflict từng commit nếu có
# git rebase --continue          # sau khi giải quyết xong từng bước

Chọn cách nào? Merge đơn giản và ít rủi ro hơn — phù hợp cho hầu hết trường hợp. Rebase tạo lịch sử commit thẳng, gọn hơn nhưng phức tạp hơn khi có conflict. Nếu mới dùng Git, hãy dùng merge trước.

Bước 4: Merge feature vào develop khi hoàn tất

git checkout develop
git merge feature/user-authentication
git push origin develop
git branch -d feature/user-authentication

Khi chuẩn bị release

# 1. Tạo release branch từ develop
git checkout develop
git checkout -b release/1.2.0
 
# 2. Chỉ fix bug, không thêm tính năng mới
git commit -m "fix: correct date format in reports"
 
# 3. Merge vào main (để deploy) và develop (để giữ sync)
git checkout main
git merge release/1.2.0
git tag -a v1.2.0 -m "Release version 1.2.0"
 
git checkout develop
git merge release/1.2.0
git branch -d release/1.2.0

Khi có bug khẩn cấp trên production

# 1. Tạo hotfix branch từ main
git checkout main
git checkout -b hotfix/fix-payment-crash
 
# 2. Fix bug
git commit -m "fix: resolve payment crash on checkout"
 
# 3. Merge vào cả main và develop
git checkout main
git merge hotfix/fix-payment-crash
git tag -a v1.2.1 -m "Hotfix: payment crash"
 
git checkout develop
git merge hotfix/fix-payment-crash
git branch -d hotfix/fix-payment-crash

Git Flow với AI coding

Git Flow đặc biệt phù hợp khi dùng AI vì nó tạo ra ranh giới rõ ràng:

  • Để AI code trên feature/* branch — không bao giờ để AI làm việc trực tiếp trên develop hay main
  • Review kỹ trước khi merge vào develop — đây là checkpoint quan trọng nhất
  • Mỗi feature branch = một tính năng — giúp bạn dễ dàng so sánh git diff develop..feature/ten để xem AI đã làm gì

Lưu ý: Git Flow phù hợp với dự án có release cycle rõ ràng (ứng dụng, thư viện). Với blog, side project nhỏ hay notebook, quy trình đơn giản hơn (chỉ dùng main + feature branch) thường là đủ.


Một số thói quen tốt nên có

Commit thường xuyên, commit nhỏ. Mỗi commit nên là một đơn vị thay đổi có nghĩa. Với AI coding, hãy commit sau mỗi tính năng nhỏ, không để tích lại cả nghìn dòng trong một commit.

Viết commit message có nghĩa. Thay vì "fix", hãy viết "fix: resolve login error when email has uppercase letters". Sau vài tuần, bạn sẽ cảm ơn bản thân về điều này.

Không commit file .env. File chứa API key, password, credentials không bao giờ được đưa vào Git. Tạo file .gitignore và thêm .env vào đó.

# Tạo .gitignore
echo ".env" >> .gitignore
echo "__pycache__/" >> .gitignore
echo "node_modules/" >> .gitignore
git add .gitignore
git commit -m "chore: add gitignore"

Luôn tạo branch trước khi để AI code. Nếu AI tạo ra kết quả tệ, bạn chỉ cần xóa branch và bắt đầu lại — code trên main vẫn an toàn.


Sai lầm thường gặp khi dùng Git với AI

Commit cả session AI trong một lần. Sau 30 phút vibe coding, bạn chạy git add . && git commit -m "update". Kết quả: 500 dòng thay đổi, một commit, không ai review nổi. Hãy commit sau mỗi tính năng nhỏ.

Không xem git diff trước khi commit. AI có thể xóa code bạn viết, thêm dependency không cần thiết, hoặc sửa file không liên quan. Chạy git diff trước mỗi commit chỉ mất 30 giây nhưng bắt được rất nhiều vấn đề.

Để AI code thẳng trên main. Nếu AI tạo ra kết quả tệ, bạn không có cách rollback an toàn. Luôn tạo branch trước (git checkout -b feature/ten), để AI làm việc ở đó, review xong mới merge.

Dùng git reset --hard khi không chắc. --hard xóa luôn code trong working directory, không khôi phục được. Trong hầu hết tình huống, --soft là lựa chọn an toàn hơn — bạn vẫn giữ được code, chỉ bỏ commit.

Commit .env vì quên .gitignore. Xảy ra nhiều hơn bạn nghĩ, đặc biệt khi AI tạo file mới. Nếu lỡ commit rồi, chạy git rm --cached .env để bỏ file khỏi tracking, sau đó thêm vào .gitignore.


Tóm lại

  1. Git bây giờ theo dõi AI, không chỉ theo dõi bạn — đây là lý do Git quan trọng hơn trong kỷ nguyên vibe coding
  2. Chạy git statusgit diff trước mỗi commit — thói quen này bắt hầu hết vấn đề trước khi chúng vào repo
  3. Commit nhỏ, commit thường xuyên — mỗi commit là một đơn vị có nghĩa, dễ review và dễ rollback
  4. Luôn dùng branch khi để AI code — nếu AI tạo ra kết quả tệ, xóa branch và bắt đầu lại, main vẫn an toàn
  5. Biết cách undo: git reset --soft là lựa chọn an toàn nhất — giữ code, bỏ commit, không mất gì
gitgithubworkflowdeveloper-toolsvibe-codingai-coding