Thế hệ cợt nhả đi làm =)))
Ngay vừa rồi ông em fresher Dev mới vào công ty đã commit một tag là “hehehe” rồi code lỗi, pipeline fail, thông báo nổ trông thật là… Cũng relax. Mặc dù trong những buổi training đã có riêng một phần nói về Commit Convention Chuẩn Chỉnh mà thế giới vẫn đang áp dụng.

Mình thấy đây cũng là hiện trạng của cả “Nhiều anh em” có nhiều năm kinh nghiệm. Chắc chắn rồi cái đầu tiên phải khẳng định đến từ sự chưa hiểu biết commit rất vu vờ, mình đã thấy rất nhiều commit kiểu “fix bug, commit, commit nhé, sửa cái này,…” Rồi đến lúc các anh em khác nhìn vào sẽ phải vào sâu thêm để ngó code xem “nó làm cái gì”.

Vì vậy, mình mới nảy ra ý tưởng hướng dẫn “Cách Viết Git Commit Convention Chuẩn Chỉnh” theo các chuẩn của thế giới giúp bạn nào chưa biết sẽ có thể commit sạch hơn và bạn biết rồi củng cố xem commit của mình đã đủ clean chưa.
Tại Sao Cần Git Commit Convention?
Trước khi đi vào chi tiết, hãy tưởng tượng bạn đang đọc lịch sử commit của một dự án mà các commit message kiểu:
- “Fix bug”
- “Update stuff”
- “Aaaaa sửa cái này nè”
Nghe quen không? Nếu bạn từng đau đầu vì phải đoán xem đồng đội đã làm gì qua những commit “bí ẩn” như thế, thì Git Commit Convention chính là cứu tinh. Đây là bộ quy tắc chuẩn hóa cách viết commit message, giúp:
- Dễ hiểu: Ai đọc cũng biết commit này làm gì.
- Tìm kiếm dễ dàng: Cần tìm commit sửa bug giao diện? Chỉ cần search theo prefix là ra.
- Tự động hóa: Các công cụ như CI/CD, changelog generator hoạt động mượt mà hơn.
- Chuyên nghiệp: Dự án nhìn “sạch sẽ”, đồng đội tôn trọng bạn hơn (thật đấy!).
Các Thành Phần Cơ Bản Của Một Commit Message Chuẩn
Một commit message chuẩn thường có cấu trúc gồm 3 phần chính:
- Type (Loại commit): Mô tả loại thay đổi (fix, feat, docs, v.v.).
- Scope (Phạm vi): Phần nào của dự án bị ảnh hưởng (frontend, backend, API, v.v.).
- Description (Mô tả): Mô tả ngắn gọn, rõ ràng về thay đổi.
Cấu trúc cơ bản trông như thế này:
<type>(<scope>): <description>
Ví dụ:
feat(auth): add login with Google OAuth
fix(ui): correct button alignment on mobile view
Nếu cần giải thích chi tiết hơn, bạn có thể thêm body và footer:
<type>(<scope>): <description>
<body: mô tả chi tiết hơn về thay đổi>
<footer: thông tin bổ sung, ví dụ: issue ID, breaking change>
Ví dụ đầy đủ:
feat(auth): add login with Google OAuth
Implement Google OAuth2 flow for user authentication.
Add new endpoint /auth/google for redirecting to Google login.
Update user model to store Google ID.
Closes #123
Các Loại Commit Phổ Biến (Type)
Dưới đây là bảng các type phổ biến trong Git Commit Convention, dựa theo chuẩn Conventional Commits (một chuẩn được nhiều team áp dụng):
Type | Ý Nghĩa | Ví Dụ |
---|---|---|
feat |
Thêm tính năng mới | feat(cart): add shopping cart checkout |
fix |
Sửa lỗi | fix(api): handle null response error |
docs |
Chỉ thay đổi tài liệu (README, comment code, v.v.) | docs(readme): update installation guide |
style |
Thay đổi định dạng code (không ảnh hưởng logic) | style(css): format with prettier |
refactor |
Tái cấu trúc code (không thêm tính năng, không sửa lỗi) | refactor(auth): simplify login logic |
test |
Thêm hoặc sửa test case | test(unit): add tests for user model |
chore |
Các thay đổi linh tinh (cập nhật dependency, config, v.v.) | chore(deps): update lodash to v4.17.21 |
perf |
Cải thiện hiệu suất | perf(db): optimize query performance |
ci |
Thay đổi cấu hình CI/CD | ci(github): add linting to workflow |
build |
Thay đổi liên quan đến build (webpack, npm scripts, v.v.) | build(webpack): add production config |
Tips: Nếu bạn commit kiểu chore: làm gì đó không biết nữa
, thì đừng ngạc nhiên khi đồng đội gửi bạn một vé đi tìm chính mình!
Scope Là Gì? Làm Sao Chọn Scope Chuẩn?
Scope giúp bạn chỉ rõ phần nào của dự án bị ảnh hưởng. Nó không bắt buộc, nhưng thêm scope sẽ làm commit message rõ ràng hơn, đặc biệt trong dự án lớn. Một số scope phổ biến:
auth
: Liên quan đến xác thực (login, logout, JWT, v.v.).ui
: Giao diện người dùng (CSS, components, v.v.).api
: Các endpoint hoặc logic phía server.db
: Cơ sở dữ liệu (schema, migration, query, v.v.).config
: Cấu hình dự án (env, webpack, v.v.).
Cách chọn scope:
- Nhìn vào file bạn vừa sửa, nó thuộc module nào? Ví dụ: sửa file trong thư mục
src/auth
-> scope làauth
. - Nếu không rõ scope, bạn có thể bỏ qua (nhưng đừng lạm dụng nhé!).
Ví dụ:
fix(ui): adjust padding for navbar
(scope:ui
).feat: add dark mode toggle
(không có scope, vì ảnh hưởng toàn dự án).
Cách Viết Description: Ngắn Gọn, Súc Tích
Phần description là nơi bạn tóm tắt thay đổi. Một description tốt nên:
- Ngắn gọn: Tối đa 50-72 ký tự (để hiển thị đẹp trong
git log
). - Rõ ràng: Trả lời câu hỏi “Commit này làm gì?”.
- Viết dạng mệnh lệnh: Bắt đầu bằng động từ như “add”, “fix”, “update”, “remove”.
- Không viết hoa chữ cái đầu: Theo chuẩn Conventional Commits.
Ví dụ:
- Tốt:
add user profile page with avatar upload
- Xấu:
Added a new profile page and some stuff for users
(quá dài, không rõ ràng).
Khi Nào Cần Body và Footer?
Nếu thay đổi phức tạp, chỉ description thôi không đủ, bạn cần thêm body và footer:
- Body: Mô tả chi tiết hơn về thay đổi. Viết thành các dòng, mỗi dòng không quá 72 ký tự, bắt đầu bằng dấu
-
hoặc số thứ tự để dễ đọc. - Footer: Thông tin bổ sung như issue ID, breaking change, hoặc ghi công ai đó.
Ví dụ:
refactor(auth): simplify JWT token generation
- Remove redundant token validation logic
- Update token expiration to 1 hour
- Add unit tests for token generation
BREAKING CHANGE: token now expires after 1 hour instead of 24 hours
Closes #456
Tips: Footer thường dùng từ khóa như Closes
, Fixes
(để tự động đóng issue trên GitHub) hoặc BREAKING CHANGE
(để cảnh báo thay đổi lớn).
So Sánh Commit Message Tệ và Chuẩn
Để bạn hình dung rõ hơn, đây là bảng so sánh giữa commit message “tệ” và “chuẩn”:
Commit Tệ | Commit Chuẩn | Lý Do Chuẩn Tốt Hơn |
---|---|---|
fix stuff |
fix(ui): correct button alignment on mobile |
Rõ phạm vi (ui), mô tả cụ thể. |
update |
feat(cart): add item quantity selector |
Có type (feat), mô tả tính năng mới. |
add login |
feat(auth): implement login with email |
Rõ scope (auth), mô tả chi tiết hơn. |
some changes in db |
chore(db): update schema for new user table |
Có type (chore), scope (db), rõ ràng. |
Tips: Commit kiểu “fix stuff” giống như bạn nói với mẹ “con ăn cơm rồi” nhưng không nói ăn gì, ăn bao nhiêu. Mẹ mà hỏi lại thì mệt lắm.
Công Cụ Hỗ Trợ Viết Commit Chuẩn
Nếu bạn lười hoặc sợ sai format, có một số công cụ giúp bạn viết commit message chuẩn:
-
Commitizen: CLI giúp bạn tạo commit message theo chuẩn Conventional Commits.
- Cài đặt:
npm install -g commitizen
- Sử dụng: Chạy
git cz
thay vìgit commit
.
- Cài đặt:
-
Husky + Commitlint: Tự động kiểm tra commit message trước khi commit.
- Cài Husky và Commitlint trong dự án.
- Cấu hình để reject commit nếu không đúng format.
-
VS Code Extensions:
- Conventional Commits: Gợi ý type, scope khi viết commit.
- GitLens: Hỗ trợ xem và viết commit message dễ dàng.
Tips: Dùng công cụ không có nghĩa là bạn “gian lận”. Nó chỉ giúp bạn tiết kiệm thời gian để tập trung vào việc code và… uống cà phê.
Một Số Lưu Ý Khi Viết Commit
- Viết bằng tiếng Anh: Nếu dự án quốc tế hoặc team có người nước ngoài, hãy dùng tiếng Anh. Nếu team toàn người Việt, tiếng Việt cũng ổn, nhưng phải thống nhất.
- Không commit quá nhiều thay đổi cùng lúc: Một commit nên chỉ làm một việc. Ví dụ: Đừng vừa sửa bug vừa thêm tính năng trong cùng một commit.
- Kiểm tra trước khi commit: Chạy
git diff
để chắc chắn bạn không commit nhầm thứ gì (như console.log “hello world”). - Thống nhất với team: Trước khi áp dụng convention, hãy họp team để mọi người đồng ý về type, scope, và format.
Kết Luận: Viết Commit Chuẩn, Đời Lên Hương
Viết Git Commit Convention không chỉ giúp dự án chuyên nghiệp mà còn thể hiện bạn là một developer “có tâm”. Hãy nhớ công thức: type(scope): description, thêm body/footer khi cần, và luôn giữ commit message ngắn gọn, rõ ràng. Với các ví dụ, bảng so sánh, và công cụ hỗ trợ trong bài, mình tin bạn sẽ biến lịch sử commit từ “thảm họa” thành “tác phẩm nghệ thuật”.
Nếu bạn có thắc mắc hoặc muốn chia sẻ cách viết commit “đỉnh của chóp”, hãy comment bên dưới nhé! Và đừng quên, commit đẹp không chỉ làm code đẹp mà còn giúp bạn… bớt bị sếp ré.