Skip to content

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.

    bash
    git add src/main.cpp
  • Thêm tất cả thay đổi (Cẩn thận):

    bash
    git 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 .gitignore trướ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:
    1. fix: handle null token in login
    2. feat: integrate stripe payment intent
    3. refactor: 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ĩaVí dụ
featTính năng mớifeat: allow user to change avatar
fixSửa lỗifix: prevent crash when user list is empty
docsTài liệudocs: update API endpoint in readme
styleFormat code (space, semi-colon)style: reformat code with prettier
refactorSửa code nhưng không đổi logicrefactor: simplify auth logic
testThêm test casetest: add unit test for user service
choreViệ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.