Save game — Git & GitHub
Mục tiêu
Biết cách “lưu game” cho code bằng Git. Khi AI sửa lỗi làm hỏng app, biết cách quay ngược thời gian về bản chạy tốt.
Sau bài này, bạn sẽ:
- ✅ Sử dụng được 3 lệnh Git cơ bản (add, commit, push)
- ✅ Đẩy code lên GitHub để backup an toàn
- ✅ Biết cách quay lại phiên bản cũ khi AI sửa hỏng app
Nội dung chính
6.1 — Horror Story: Khi không có Git
Bạn code 3 ngày. App chạy ngon. Nhờ AI thêm 1 tính năng nhỏ. AI sửa 5 file cùng lúc. App sập hoàn toàn. Bạn không nhớ trước đó code như thế nào. 3 ngày công sức… bay mất.
Git là hệ thống “save game” cho code. Mỗi lần save (commit) là 1 checkpoint. Bất cứ lúc nào bạn cũng quay lại checkpoint trước đó.
Mẹo: Quy tắc vàng — Commit TRƯỚC khi nhờ AI làm gì lớn. Nếu AI sửa hỏng, bạn chỉ cần 1 lệnh để quay lại bản chạy tốt. Không commit = không có đường quay lại.
6.2 — Ba lệnh sống còn
Bạn chỉ cần nhớ 3 lệnh. AI sẽ giúp bạn phần còn lại:
┌────────────────────────────────────────────────────────────────┐
│ 3 LỆNH GIT SỐNG CÒN │
│ │
│ 1️⃣ git add . │
│ "Chọn tất cả thay đổi để chuẩn bị lưu" │
│ → Giống như bạn chọn file để bỏ vào USB │
│ │
│ 2️⃣ git commit -m "Mô tả thay đổi" │
│ "Lưu checkpoint với ghi chú" │
│ → Giống như bấm Save Game + đặt tên save │
│ │
│ 3️⃣ git push │
│ "Đẩy lên GitHub (cloud)" │
│ → Giống như upload save game lên cloud, không mất khi │
│ hỏng máy │
│ │
│ 🔄 BONUS — git revert [commit-id] │
│ "Quay ngược thời gian về checkpoint cũ" │
│ → Load save game cũ │
│ │
└────────────────────────────────────────────────────────────────┘
6.3 — Ví dụ thực tế: Commit workflow từng bước
Hãy xem một phiên làm việc thực tế:
--- BUỔI SÁNG ---
1. Mở Cursor, bắt đầu code tính năng "thêm sản phẩm"
2. Code xong, test OK → COMMIT:
git add .
git commit -m "Thêm form tạo sản phẩm mới"
git push
--- BUỔI CHIỀU ---
3. Nhờ AI thêm tính năng "xóa sản phẩm"
4. AI sửa 3 file, test OK → COMMIT:
git add .
git commit -m "Thêm nút xóa sản phẩm với popup xác nhận"
git push
5. Nhờ AI thêm tính năng "sửa sản phẩm"
6. AI sửa 4 file... APP SẬP! Lỗi tùm lum!
7. ĐỪNG HOẢNG → Quay lại bản chạy tốt:
git revert HEAD
→ App quay lại trạng thái sau commit "xóa sản phẩm" → chạy ngon lại!
8. Nhờ AI sửa lại tính năng "sửa sản phẩm" với prompt rõ hơn
9. Lần này OK → COMMIT:
git add .
git commit -m "Thêm chức năng sửa sản phẩm inline"
git push
6.4 — Quy tắc Save Game
✅ NÊN commit khi:
- Vừa hoàn thành 1 tính năng và test OK
- Trước khi nhờ AI sửa/thêm gì lớn
- Cuối ngày làm việc
❌ KHÔNG NÊN commit khi:
- App đang lỗi
- Đang sửa dở giữa chừng
Mẹo: Commit message nên bắt đầu bằng động từ: “Thêm…”, “Sửa…”, “Xóa…”, “Cập nhật…”. Ví dụ: “Thêm trang đăng nhập”, “Sửa lỗi hiển thị giỏ hàng”. Như vậy sau này đọc lại sẽ biết mỗi commit làm gì.
6.5 — Đẩy code lên GitHub
Bước 1: Tạo tài khoản tại github.com
Bước 2: Tạo repository mới:
1. Bấm nút "+" ở góc trên phải → "New repository"
2. Đặt tên: my-todo-app
3. Chọn Private (nếu không muốn ai thấy) hoặc Public
4. ĐỪNG tick "Add a README" (vì project đã có code rồi)
5. Bấm "Create repository"
Bước 3: Kết nối và đẩy code (trong Terminal của Cursor):
git init
git add .
git commit -m "Phiên bản đầu tiên - App To-do với Auth + Supabase"
git branch -M main
git remote add origin https://github.com/YOUR-USERNAME/my-todo-app.git
git push -u origin main
Mẹo: Cursor có thể yêu cầu bạn đăng nhập GitHub lần đầu. Làm theo hướng dẫn trên màn hình — thường là bấm “Sign in with browser” và xác nhận trên trình duyệt.
6.6 — Mẹo: Dùng AI viết commit message
Không biết mô tả gì? Nhờ AI:
Prompt trong Cursor Chat:
"Xem các thay đổi tôi vừa làm và viết cho tôi commit message
bằng tiếng Việt, ngắn gọn, dưới 50 ký tự."
6.7 — File .gitignore: Không đẩy file nhạy cảm
Nhớ file .env chứa API key? Bạn KHÔNG ĐƯỢC đẩy file đó lên GitHub:
Tạo file .gitignore ở thư mục gốc (nếu chưa có), thêm:
node_modules/
.env
.env.local
dist/
Những file/thư mục trong .gitignore sẽ bị Git bỏ qua, không bao giờ push lên GitHub.
Lỗi thường gặp
Vấn đề: “Push bị reject” — git push báo lỗi
→ Thường là vì GitHub repo có file mà local không có (ví dụ: README). Chạy git pull --rebase origin main trước, rồi git push lại. Nếu vẫn lỗi, copy dòng lỗi và hỏi AI trong Cursor Chat.
Vấn đề: “Merge conflict” — Git báo xung đột khi pull
→ Đừng hoảng. Mở file bị conflict (Git sẽ đánh dấu bằng <<<<<<< và >>>>>>>). Hỏi AI: “File này đang bị merge conflict, giúp tôi chọn phần nào giữ lại”. Sau đó git add . và git commit.
Vấn đề: “Lỡ push .env lên GitHub” — API key bị lộ
→ Vào Supabase → Settings → API → Regenerate API key (tạo key mới). Thêm .env vào .gitignore. Commit lại. Key cũ đã bị lộ thì phải tạo mới, không có cách nào “gỡ” được.
Vấn đề: “git init bị lỗi — command not found”
→ Bạn chưa cài Git. Tải tại git-scm.com. Windows: chạy installer. Mac: mở Terminal gõ git --version, hệ thống sẽ hỏi cài Xcode Command Line Tools → bấm Install.
Mẹo: Nếu bạn dùng Cursor/Windsurf, hầu hết thao tác Git có thể nhờ AI làm qua Terminal. Chỉ cần nói: “Commit tất cả thay đổi với message: Thêm tính năng XYZ” — AI sẽ gõ lệnh cho bạn.
Bài tập thực hành
Nhiệm vụ:
Bước 1 (5 phút): Tạo tài khoản github.com và cài Git (nếu chưa có)
- Tiêu chí: chạy
git --versiontrong Terminal thấy số phiên bảnBước 2 (5 phút): Init Git và đẩy project lên GitHub theo hướng dẫn phần 6.5
- Tiêu chí: vào github.com thấy code project
- Gợi ý nếu bị stuck: kiểm tra đã tạo repo trống trên GitHub chưa (không tick “Add a README”)
Bước 3 (5 phút): Thêm 1 tính năng nhỏ (ví dụ: đổi màu nút) → Commit lần 2 → Push
- Tiêu chí: GitHub repo có ít nhất 2 commits
Bước 4 (10 phút): Nhờ AI thay đổi gì đó lớn (có thể gây lỗi) → Thực hành
git revert
- Tiêu chí: quay lại được bản chạy tốt sau khi revert
- Gợi ý nếu bị stuck: chạy
git log --onelineđể xem danh sách commits, copy commit-id cần quay vềThời gian: 25 phút Deliverable: Link GitHub repo với ít nhất 2 commits
Tổng kết bài 6
| Bạn đã học được | Chi tiết |
|---|---|
| Git là gì | Hệ thống save game cho code |
| 3 lệnh cơ bản | add, commit, push |
| Commit workflow | Commit trước khi AI sửa, commit sau khi test OK |
| Revert | Quay ngược về bản cũ khi AI phá hỏng |
| GitHub | Cloud lưu trữ code, không mất khi hỏng máy |
| .gitignore | Không push file nhạy cảm (.env) lên GitHub |
Kiểm tra kiến thức
1. Ba lệnh Git cơ bản theo đúng thứ tự là gì?
2. Khi nào nên commit code?
3. File .gitignore có tác dụng gì?
4. Lệnh 'git revert HEAD' làm gì?
5. Tại sao KHÔNG được push file .env lên GitHub?