Chuẩn hóa Commit Message với Commitizen: Tạm biệt ‘fix bug’, ‘done’ và tự động hóa CHANGELOG

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Vấn đề: Khi Git Log trở thành một “mê cung” không lối thoát

Bạn đã bao giờ mở git log của một dự án cũ và “đứng hình” trước những dòng tin nhắn như: “fix bug”, “update”, “done”, hay thậm chí là “……”? Sau 3 tháng, chính bạn cũng chẳng thể nhớ nổi mình đã sửa logic gì nếu không soi từng dòng code. Thực tế, việc duy trì một lịch sử commit sạch sẽ thường bị bỏ qua vì áp lực deadline.

Conventional Commits ra đời để giải quyết bài toán này. Tuy nhiên, việc phải nhớ khi nào dùng feat, fix, hay cấu trúc type(scope): description rất dễ gây nhầm lẫn. Đây là lúc Commitizen (cz-cli) tỏa sáng. Công cụ này biến việc viết commit thành một buổi phỏng vấn ngắn. Bạn chỉ cần chọn và trả lời, mọi thứ còn lại máy tính sẽ tự lo.

Quick Start: Cài đặt và sử dụng trong 5 phút

Nếu dự án của bạn dùng Node.js, việc thiết lập cực kỳ đơn giản. Tôi thường cài đặt trực tiếp vào project để đảm bảo mọi thành viên trong team đều dùng chung một quy chuẩn.

Bước 1: Cài đặt Commitizen và Adapter

npm install --save-dev commitizen cz-conventional-changelog

Bước 2: Khởi tạo cấu hình

Thêm đoạn cấu hình sau vào cuối file package.json của bạn:

"config": {
  "commitizen": {
    "path": "cz-conventional-changelog"
  }
}

Bước 3: Tạo script thực thi

Trong mục scripts của package.json, hãy thêm dòng này:

"scripts": {
  "commit": "cz"
}

Giờ đây, thay vì gõ git commit -m "..." một cách cảm tính, bạn chỉ cần gõ:

npm run commit

Một giao diện tương tác sẽ hiện ra trong terminal. Bạn chỉ việc dùng phím mũi tên để chọn loại thay đổi (feat, fix, docs…) và điền mô tả. Kết quả là một commit message chuẩn chỉnh, không sai một dấu phẩy.

Tại sao bạn nên dùng Commitizen thay vì gõ tay?

Nhiều dev cho rằng tự gõ sẽ nhanh hơn. Tuy nhiên, khi làm việc nhóm, mỗi người một phong cách sẽ khiến Git log trở nên hỗn loạn.

1. Tính nhất quán tuyệt đối

Commitizen ép mọi người vào một khuôn khổ chung. Khi lịch sử commit đều tăm tắp, việc tìm kiếm lỗi trở nên cực nhanh. Ví dụ, bạn có thể lọc ngay các commit liên quan đến module “Auth” bằng cách tìm từ khóa feat(auth).

2. Học quy chuẩn mà không cần học thuộc lòng

Adapter cz-conventional-changelog cung cấp sẵn các gợi ý trực quan:

  • feat: Thêm tính năng mới.
  • fix: Sửa lỗi kỹ thuật.
  • docs: Cập nhật tài liệu hướng dẫn.
  • style: Sửa format code (khoảng trắng, dấu chấm phẩy) mà không đổi logic.
  • refactor: Tái cấu trúc code nhưng không thêm tính năng hay sửa bug.
  • perf: Tối ưu hiệu năng.
  • test: Bổ sung hoặc sửa các file kiểm thử.
  • chore: Thay đổi nhỏ về công cụ hỗ trợ hoặc build process.

Nâng cao: Tự động hóa CHANGELOG với standard-version

Đây là tính năng giúp bạn tiết kiệm hàng giờ làm báo cáo mỗi khi release. Nếu đã có lịch sử commit chuẩn, việc tạo file CHANGELOG.md chuyên nghiệp chỉ mất vài giây.

Tôi từng làm dự án outsource yêu cầu liệt kê chi tiết tính năng và bug fix mỗi kỳ sprint. Thay vì ngồi copy-paste thủ công, standard-version đã tự động hóa 100% quy trình này.

Cài đặt và cấu hình

npm install --save-dev standard-version

Thêm script vào package.json:

"scripts": {
  "release": "standard-version"
}

Khi cần ra mắt phiên bản mới, bạn chỉ cần chạy npm run release. Hệ thống sẽ tự thực hiện 4 việc:

  1. Quét toàn bộ commit từ bản release gần nhất.
  2. Tự động tăng version trong package.json theo chuẩn SemVer.
  3. Cập nhật file CHANGELOG.md với danh sách thay đổi được phân loại rõ ràng.
  4. Tạo một git tag mới cho phiên bản đó.

Kinh nghiệm thực tế khi triển khai cho Team

Trong một team 8 người tôi từng quản lý, việc áp dụng Commitizen đã giúp giảm 30% thời gian thảo luận trong các buổi họp review vì mọi thay đổi đều đã được ghi chép rõ ràng. Ban đầu, một vài thành viên có thể thấy phiền vì phải chọn menu. Nhưng sau 1 tuần, lợi ích từ việc đọc hiểu code của nhau nhanh hơn đã thuyết phục được tất cả.

Mẹo nhỏ: Sử dụng npx để tối giản

Nếu không muốn thêm script vào project, bạn có thể chạy nhanh bằng lệnh npx cz. Tuy nhiên, hãy đảm bảo bạn đã cấu hình adapter trong project để bộ câu hỏi hiển thị đúng ý muốn.

Kết hợp với Husky để “giữ kỷ luật”

Để ngăn chặn việc “lách luật” bằng git commit -m thông thường, hãy kết hợp với Huskycommitlint. Nếu message không đúng chuẩn, Git sẽ từ chối commit ngay lập tức. Điều này đảm bảo 100% commit trong repo luôn sạch đẹp.

Lời kết

Sử dụng Commitizen không đơn thuần là để cho đẹp. Đó là tư duy quản lý sản phẩm chuyên nghiệp. Một commit message cẩn thận là món quà bạn dành cho chính mình trong tương lai và cho đồng nghiệp khi cần bảo trì code. Nếu dự án đang lớn dần, hãy cài đặt Commitizen ngay hôm nay để xây dựng một quy trình DevOps chuẩn chỉnh.

Share: