Giao diện
2. Add & Commit (The Workflow)
IMPORTANT
GOAL: Hiểu rõ vòng đời của một file trong Git và tuân thủ chuẩn commit quốc tế.
2.1 The Three States (Ba Trạng Thái)
Hiểu rõ mô hình này là bắt buộc. Git không lưu thay đổi ngay lập tức.
Mô hình ASCII (Cho Terminal Users):
text
+-------------------+ +-------------------+ +-------------------+
| | | | | |
| Working Directory | -> | Staging Area | -> | Repository |
| (Nơi bạn code) | | (Khu vực chờ) | | (Lịch sử chốt) |
| | | | | |
+-------------------+ +-------------------+ +-------------------+
| ^ ^
| git add | git commit |
+--------------------------+------------------------+Tại sao cần Staging Area?
Nó cho phép bạn chuẩn bị một commit hoàn hảo. Bạn có thể sửa 10 file, nhưng chỉ muốn commit 2 file liên quan đến tính năng A, để lại 8 file kia cho tính năng B.
2.2 Đưa file vào Staging (git add)
Thêm một file cụ thể: Kiểm soát chính xác những gì sẽ commit.
bashgit add src/main.cppThêm tất cả thay đổi (Cẩn thận):
bashgit add .WARNING
Chỉ dùng
git add .khi bạn RẤT CHẮC CHẮN rằng mình không add nhầm file rác (logs, configs, binaries) vào repo. Luôn kiểm tra.gitignoretrước.
2.3 Chốt thay đổi (git commit)
Di chuyển thay đổi từ Staging Area vào Repository.
bash
git commit -m "messsage"HPN'S RULE #2: ATOMIC COMMITS
Một commit chỉ làm MỘT việc.
- ❌ Sai: "Fix login bug and add payment feature and refactor header." (Quá nhiều việc, không thể revert riêng lẻ).
- ✅ Đúng: Tách làm 3 commits:
fix: handle null token in loginfeat: integrate stripe payment intentrefactor: extract header into component
2.4 Conventional Commits (HPN Standard)
Chúng ta tuân thủ chuẩn Conventional Commits. Mọi commit message phải theo format:
<type>: <description>
Các Types bắt buộc:
| Type | Ý nghĩa | Ví dụ |
|---|---|---|
| feat | Tính năng mới | feat: allow user to change avatar |
| fix | Sửa lỗi | fix: prevent crash when user list is empty |
| docs | Tài liệu | docs: update API endpoint in readme |
| style | Format code (space, semi-colon) | style: reformat code with prettier |
| refactor | Sửa code nhưng không đổi logic | refactor: simplify auth logic |
| test | Thêm test case | test: add unit test for user service |
| chore | Việc lặt vặt (build, dep) | chore: update npm dependencies |
TIP
Tại sao? Vì nó giúp máy (tool) tự động đọc lịch sử để tạo ChangeLog và xác định Version (Major/Minor/Patch). Đừng viết commit theo cảm hứng.
🧠 Quiz
Câu 1: Staging Area (Khu vực chờ) trong Git có vai trò gì?
- [ ] A) Lưu trữ code trên remote server
- [x] B) Cho phép chọn lọc chính xác những thay đổi nào sẽ được commit
- [ ] C) Tự động backup code trước khi commit
- [ ] D) Kiểm tra lỗi syntax trước khi commit
💡 Giải thích: Staging Area là vùng trung gian giữa Working Directory và Repository. Nó cho phép bạn kiểm soát chính xác những file/thay đổi nào sẽ đưa vào commit tiếp theo, thay vì commit tất cả.
Câu 2: Tại sao nên tuân thủ nguyên tắc "Atomic Commits"?
- [ ] A) Để commit nhanh hơn
- [ ] B) Để giảm dung lượng repository
- [x] C) Để mỗi commit chỉ làm một việc, dễ revert và review riêng lẻ
- [ ] D) Để GitHub hiển thị đẹp hơn
💡 Giải thích: Atomic Commit nghĩa là mỗi commit chỉ chứa một thay đổi logic duy nhất. Điều này giúp dễ dàng revert một thay đổi cụ thể, dễ code review, và lịch sử commit rõ ràng.
Câu 3: Lệnh git add . tiềm ẩn rủi ro gì?
- [x] A) Có thể add nhầm file rác như logs, configs, binaries vào repository
- [ ] B) Xóa tất cả file trong thư mục hiện tại
- [ ] C) Tự động commit luôn mà không cần chạy
git commit - [ ] D) Ghi đè lên commit trước đó
💡 Giải thích:
git add .thêm TẤT CẢ thay đổi trong thư mục hiện tại vào staging area, bao gồm cả file rác. Luôn kiểm tra.gitignorevà dùnggit statustrước khi add để tránh đưa file không mong muốn vào repo.