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.