Trong blog này, mình sẽ chia sẻ chi tiết vì sao cần commit chuẩn, cấu trúc commit message, quy định cụ thể, kèm ví dụ minh họa và công cụ hỗ trợ.
1. Tại sao phải có quy định commit?
Khi làm việc nhóm, bạn sẽ gặp ngay mấy dòng commit “huyền thoại”:
- update code
- fix bug
- test
- done
👉 Sau 1 tháng, nhìn lại log thì chẳng ai biết commit đó làm gì.
Để tránh hỗn loạn, team cần thống nhất quy định commit để:
- Lịch sử dự án rõ ràng, dễ đọc.
- Tìm lỗi / debug dễ hơn.
- Tạo changelog tự động cho release.
- Code review nhanh và hiệu quả hơn.
2. Cấu trúc commit chuẩn (theo Conventional Commits)
Một commit message chuẩn có cấu trúc như sau:
<type>(scope): <short description>
[body]
[footer]
2.1. Type – loại commit
Một số type phổ biến:
- feat → thêm tính năng mới
- fix → sửa bug
- docs → thay đổi tài liệu
- style → chỉnh format code (tab, space, dấu ;…), không ảnh hưởng logic
- refactor → tối ưu code, không thêm tính năng, không fix bug
- test → thêm hoặc chỉnh sửa test
- chore → việc vặt (build, config, update deps)
2.2. Scope – phạm vi
Chỉ định phần nào của project thay đổi, ví dụ: auth, api, ui, database.
2.3. Short description – mô tả ngắn
- Viết ngắn ≤ 50 ký tự.
- Dùng động từ: “thêm”, “sửa”, “cập nhật”, “xóa”.
2.4. Body – nội dung chi tiết (tùy chọn)
Mô tả thêm lý do, cách làm, thay đổi gì.
2.5. Footer – thông tin bổ sung (tùy chọn)
Dùng để ghi issue liên quan hoặc breaking changes.
Closes #123
BREAKING CHANGE: auth flow requires JWT
3. Ví dụ commit message chuẩn
feat(auth): thêm chức năng đăng nhập bằng Google
- Thêm button “Login with Google”
- API tích hợp Google OAuth
- Viết test case cho flow login
Closes #45
fix(api): sửa lỗi trả về 500 khi gọi /users
docs(readme): bổ sung hướng dẫn setup môi trường
4. Quy định khi viết commit (step by step)
- Chia nhỏ commit – mỗi commit chỉ nên làm 1 việc (fix bug thì chỉ fix bug, không kèm dọn code).
- Đặt type đúng – phân loại commit rõ ràng (feat, fix, docs...).
- Thêm scope nếu cần – để biết commit ảnh hưởng module nào.
- Viết description ngắn gọn – tránh dài dòng, không viết kiểu “update”, “done”.
- Body (nếu cần) – ghi chi tiết lý do hoặc cách fix, đặc biệt với commit quan trọng.
- Footer (nếu cần) – link issue, ticket hoặc note breaking change.
- Luôn test code trước khi commit – commit “chết” sẽ làm khổ cả team.
5. Công cụ hỗ trợ commit chuẩn
- Commitlint → kiểm tra format commit.
- Husky → chạy script (lint, test) trước khi commit.
- VS Code Extension (Conventional Commits) → gợi ý format commit khi gõ.
6. Cheat sheet commit nhanh
Type | Ý nghĩa | Ví dụ |
---|
feat | Thêm tính năng | feat(ui): thêm dark mode |
fix | Sửa bug | fix(auth): sai token khi refresh |
docs | Update docs | docs(readme): update hướng dẫn cài |
style | Chỉnh style code | style: format code eslint |
refactor | Refactor code | refactor(api): tối ưu query |
test | Thêm/chỉnh test | test(product): thêm test filter |
chore | Việc vặt | chore: update package lock |
7. Kết
Viết commit message chuẩn không mất nhiều thời gian, nhưng đem lại cực nhiều lợi ích:
- Dễ quản lý dự án.
- Giúp đồng đội hiểu code nhanh.
- Đỡ đau đầu khi debug hoặc release.
Hãy coi commit là cách bạn trò chuyện với team và chính bạn trong tương lai. Viết tử tế hôm nay, vài tháng sau sẽ cảm ơn bản thân.