Cách Viết Git Commit Convention Chuẩn Chỉnh: Làm Code Sạch, Đời Lắm Drama

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.

f2f34be8-3d24-4965-9fbe-4662f704ca34

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ì”.

44105a41-819f-485d-a07f-2929eb5c1e06

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:

  1. Type (Loại commit): Mô tả loại thay đổi (fix, feat, docs, v.v.).
  2. Scope (Phạm vi): Phần nào của dự án bị ảnh hưởng (frontend, backend, API, v.v.).
  3. 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 bodyfooter:

<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 bodyfooter:

  • 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:

  1. 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.
  2. 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.
  3. 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

  1. 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.
  2. 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.
  3. 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”).
  4. 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é.

Chia sẻ bài viết:
Theo dõi
Thông báo của
1 Bình luận
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận

Có thể bạn quan tâm