Bảy lệnh Git đủ sống
Git tối thiểu cho người làm Vibe Code. Không nhánh phức tạp, không rebase — chỉ bảy lệnh và một phản xạ cứu mạng.
Git là thứ khiến bạn không bao giờ mất việc đã làm và lùi lại được khi AI phá. Với Vibe Code, nó cần hơn với người viết tay, vì AI sửa nhiều dòng một lúc.
Bài này cố tình chỉ dạy 7 lệnh. Git có hơn 150; bạn dùng 7 cái cho 95% việc.
Mô hình trong đầu: ba khu
[Thư mục làm việc] → [Khu chờ] → [Lịch sử] → [GitHub]
bạn sửa file git add git commit git push
- Thư mục làm việc: file thật, bạn và AI đang sửa.
- Khu chờ (staging): những thay đổi bạn chọn để chốt.
- Lịch sử (local): các mốc đã chốt, nằm trong máy bạn.
- GitHub: bản sao trên mạng, để không mất và để chia sẻ.
Hiểu 4 khu này thì mọi lệnh sau đều có nghĩa.
Bảy lệnh
1. git init — bắt đầu theo dõi (một lần cho mỗi project)
cd C:\NVAI\Claude\web-dau-tien
git init
Sinh ra thư mục ẩn .git. Từ giờ Git nhớ mọi thay đổi.
2. git status — lệnh bạn gõ nhiều nhất
git status
Trả lời: file nào đã sửa, file nào trong khu chờ, đang ở nhánh nào. Gõ nó trước và sau mỗi lệnh khác, ít nhất trong hai tuần đầu. Nó là cái đèn trong phòng tối.
3. git add — đưa vào khu chờ
git add . # mọi thay đổi
git add index.html # chỉ một file
4. git commit — chốt một mốc
git commit -m "Them bo loc theo thang cho bang don hang"
Lời nhắn là thứ bạn ba tháng sau sẽ đọc. Quy ước dùng trong giáo trình này:
- Viết tiếng Việt không dấu — tránh hẳn chuyện bảng mã trên dòng lệnh Windows (xem bẫy dấu tiếng Việt).
- Nói việc, không nói file: "Them bo loc thang" tốt hơn "Sua index.html".
- Một việc một commit. Đừng gộp "thêm bộ lọc + đổi màu + sửa lỗi lưu" vào một mốc — hỏng thì không lùi riêng được.
5. git log — xem lịch sử
git log --oneline -10
Ra danh sách kiểu:
a3f91c2 Them bo loc theo thang cho bang don hang
7b2e105 Sua loi khong luu duoc khi ten co dau
e91d4a8 Dung trang gioi thieu dau tien
Dãy chữ đầu là mã mốc. Bạn cần nó cho lệnh thứ 6.
6. git checkout / git restore — lệnh cứu mạng
Đây là lệnh đáng giá nhất bài. AI vừa sửa và làm vỡ hết? Hai chữ:
git restore .
Mọi thay đổi chưa commit bị bỏ, file về đúng như mốc gần nhất. Việc 20 phút của AI biến mất — và đó chính là cái bạn muốn.
Muốn xem lại cả project ở một mốc cũ:
git checkout 7b2e105 # xem trạng thái tại mốc đó
git checkout main # quay về hiện tại
Trước khi nhờ AI làm một việc lớn:
git add . ; git commit -m "Moc truoc khi them tinh nang bao cao"
Sau khi nó làm, nếu kết quả tệ:
git restore .
Hai dòng này là toàn bộ "lưới an toàn" của Vibe Code. Ai làm được phản xạ này thì không bao giờ mất quá 20 phút công sức, bất kể AI sai cỡ nào. Ai không làm thì sẽ có một buổi chiều rất buồn — thường là vào tuần thứ ba.
7. git push — đẩy lên GitHub
Lệnh này cần repo trên GitHub trước — bài sau làm việc đó.
git push
Xem AI vừa sửa gì: git diff
Lệnh thứ tám, nhưng quan trọng ngang bảy lệnh trên khi làm Vibe Code:
git diff # thay đổi chưa vào khu chờ
git diff --stat # chỉ xem bao nhiêu dòng, ở file nào
Dùng nó sau mỗi lượt AI sửa. Đọc git diff --stat mất 5 giây và phát hiện ngay chuyện bất thường:
index.html | 412 ++++++++++++++---------------------
412 dòng đổi cho một yêu cầu "thêm nút xuất Excel"? Nó vừa viết lại cả file. Đừng commit — git restore . và ra đề lại kèm câu "chỉ sửa phần cần sửa".
Tôi dùng git diff --stat như một cái cân. Quy luật đúc từ thực tế:
| Yêu cầu | Số dòng hợp lý | Quá số này là đáng ngờ |
|---|---|---|
| Sửa chữ, sửa màu | 1–5 | > 20 |
| Thêm một nút có hành vi | 10–40 | > 100 |
| Thêm một màn hình | 80–250 | > 500 |
| Sửa một lỗi | 1–15 | > 50 |
Dòng cuối là dòng quan trọng nhất: một bản sửa lỗi 200 dòng gần như luôn là một bản tái cấu trúc đội lốt sửa lỗi — và nó mang theo lỗi mới. Khi thấy vậy, tôi bỏ và yêu cầu lại: "Sửa đúng nguyên nhân, nhỏ nhất có thể, không dọn dẹp gì thêm."
.gitignore — thứ không bao giờ đưa vào Git
Tạo file tên .gitignore ở gốc project:
node_modules/
.wrangler/
dist/
.dev.vars
.env
*.log
.DS_Store
Thumbs.db
Giải thích ba dòng quan trọng:
node_modules/— thư viện tải về, hàng chục nghìn file, cài lại được bằng một lệnh. Đưa vào Git là làm repo phình lên vô ích..dev.varsvà.env— chứa mật khẩu, khóa API. Đưa lên GitHub là rò rỉ thật. Xem Bí mật và token.dist/— thư mục sinh ra từ build; sinh lại được.
Git lưu lịch sử. Bạn xóa .env và commit tiếp, nội dung cũ vẫn nằm trong lịch sử, ai cũng đọc được bằng git log -p.
Việc đúng phải làm, theo thứ tự này:
1. Thu hồi và đổi ngay cái khóa đó ở nơi phát hành (Cloudflare, Anthropic...). Đây là bước duy nhất thật sự cần thiết.
2. Thêm vào .gitignore.
3. Xóa khỏi lịch sử nếu repo công khai (git filter-repo) — nhưng đừng coi đây là cách sửa: khóa cũ phải xem như đã mất.
Thứ tự này quan trọng: nhiều người dồn hết công sức vào bước 3 và quên bước 1.
Tôi tránh Git nửa tháng vì nghe nói "khó, dễ hỏng". Thứ đổi ý tôi là một câu của người kèm: "Git chỉ thêm, không bớt. Commit rồi thì không mất được nữa."
Đúng vậy: suốt thời gian học, tôi chưa mất gì vì Git — tôi chỉ mất đồ ở những ngày chưa dùng Git. Và tôi chỉ dùng đúng 4 lệnh: status, add ., commit -m, restore .. Ba lệnh kia học sau cũng được.
Bảng tra nhanh
| Tình huống | Lệnh |
|---|---|
| Đang có gì? | git status |
| AI vừa sửa gì? | git diff --stat rồi git diff |
| Chốt mốc | git add . ; git commit -m "..." |
| AI làm hỏng, bỏ hết | git restore . |
| Bỏ riêng một file | git restore index.html |
| Xem lịch sử | git log --oneline -10 |
| Đẩy lên GitHub | git push |
| Lỡ commit nhưng chưa push, muốn sửa lời nhắn | git commit --amend -m "..." |
- Đủ cho Cấp 2: bốn khu, bảy lệnh,
git diffnhư công cụ kiểm soát AI,.gitignore, cảnh báo rò rỉ khóa. - Cố tình bỏ:
rebase,cherry-pick,stash, giải quyết xung đột gộp nhánh. Làm một mình thì gần như không cần; cần thì học đúng lúc gặp. - Rủi ro còn lại: commit vẫn chỉ nằm trong máy bạn. Chưa
pushthì chưa an toàn trước chuyện máy hỏng — bài tiếp theo.
Trên project của bạn:
git init, tạo.gitignore, commit mốc đầu.- Nhờ AI thêm một tính năng nhỏ. Chạy
git diff --stattrước khi commit, đọc số dòng. - Cố ý phá: nhờ nó "viết lại toàn bộ file cho đẹp hơn". Xem
git diff --statra mấy trăm dòng. git restore .— thấy mọi thứ về nguyên. Đây là lúc bạn thật sự tin vào Git.