Git Commit Template & Conventional Commits: Đừng để lịch sử Git trở thành “bãi rác”

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

Mỳ ăn liền: 3 bước để có Commit Template “xịn”

Nếu bạn đang vội và muốn dự án chuyên nghiệp ngay lập tức, hãy triển khai bộ template này trong vòng chưa đầy 60 giây:

Bước 1: Tạo file template tại thư mục gốc của người dùng (hoặc ngay trong dự án):

touch ~/.gitmessage

Bước 2: Dán nội dung chuẩn hóa này vào file .gitmessage:

<type>(<scope>): <subject>

# --- DANH SÁCH LOẠI COMMIT ---
#   feat:     Tính năng mới
#   fix:      Sửa lỗi
#   docs:     Cập nhật tài liệu
#   style:    Định dạng code (không đổi logic)
#   refactor: Tái cấu trúc (không fix cũng không thêm feature)
#   perf:     Tối ưu hiệu năng
#   test:     Bổ sung unit test
#   chore:    Cập nhật build tool, dependencies...
# --------------------------
# <scope>: Module ảnh hưởng (ví dụ: auth, api, ui...)
# <subject>: Mô tả ngắn gọn (dưới 50 ký tự)

Bước 3: Kích hoạt template cho toàn bộ hệ thống:

git config --global commit.template ~/.gitmessage

Kể từ giờ, mỗi khi gõ git commit, bạn sẽ thấy một bản hướng dẫn hiện ra ngay trong trình soạn thảo. Việc này giúp bạn tránh khỏi tình trạng “đứng hình” vì không biết viết gì.

Vì sao “commit bừa” lại là tự đào hố chôn mình?

Hãy nhớ lại lần gần nhất bạn chạy git log và thấy một danh sách dài dằng dặc những dòng chữ vô nghĩa như “fixed”, “update”, “asdfghj”. Thật thảm họa đúng không?

Lúc mới đi làm, tôi từng mất 4 tiếng đồng hồ chỉ để tìm lại nguyên nhân thay đổi một hàm tính toán giá tiền. Lý do? Commit message chỉ ghi đúng một chữ: “fix”. Trong một dự án có hơn 1.000 file code, việc đọc lại hàng trăm commit “vô danh” như vậy chẳng khác nào mò kim đáy bể.

Khi làm việc nhóm, thói quen lười viết commit không chỉ gây ức chế cho đồng nghiệp mà còn triệt tiêu khả năng tự động hóa. Bạn sẽ phải tốn cả buổi chiều để soạn Changelog thủ công thay vì để máy móc làm thay trong 3 giây.

Conventional Commits: Quy tắc vàng của dân Pro

Thay vì mỗi người viết một kiểu, cộng đồng đã thống nhất bộ quy chuẩn Conventional Commits. Đây thực chất là một cách đặt tên khoa học để máy tính có thể hiểu và phân loại được lịch sử code của bạn.

Một commit đúng chuẩn sẽ trông như thế này:

feat(auth): thêm tính năng đăng nhập bằng Google

- Tích hợp Google OAuth2 SDK
- Cập nhật bảng users trong database

Fixes: #123

Các loại “type” bạn nhất định phải nhớ:

  • feat: Thêm tính năng mới (ví dụ: tạo trang checkout).
  • fix: Sửa lỗi (ví dụ: lỗi hiển thị giá trên mobile).
  • refactor: Sửa code cho sạch nhưng tính năng không đổi.
  • docs: Sửa README, comment hoặc tài liệu API.
  • chore: Việc vặt như nâng cấp thư viện React hay cấu hình Docker.

Cách phân loại này cực kỳ quyền lực. Bạn có thể lọc nhanh toàn bộ các tính năng mới trong tháng qua chỉ với một câu lệnh grep đơn giản.

Nâng cấp: Để công cụ tự viết commit cho bạn

Nếu thấy nhớ các type quá khó, hãy dùng Commitizen. Thay vì phải tự gõ, bạn sẽ được trả lời các câu hỏi trắc nghiệm để tạo thông điệp chuẩn xác.

Cài đặt nhanh Commitizen:

npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

Giờ đây, bạn chỉ cần gõ git cz. Một giao diện tương tác sẽ hiện lên, việc của bạn chỉ là chọn đúng loại thay đổi và nhấn Enter.

Tự động tạo Changelog: Tuyệt chiêu rảnh tay

Đây là phần giá trị nhất. Khi mọi commit đều tuân thủ chuẩn, bạn có thể tạo file CHANGELOG.md chuyên nghiệp chỉ với một dòng lệnh:

npx standard-version

Công cụ này sẽ tự động phân tích lịch sử Git để làm 3 việc: tăng số version (ví dụ từ 1.0.1 lên 1.1.0), liệt kê các thay đổi vào file Changelog và tạo git tag. Bạn sẽ không bao giờ phải cặm cụi gõ từng dòng nhật ký thay đổi nữa.

Kinh nghiệm xương máu từ thực tế

Lúc mới áp dụng quy chuẩn này vào team 10 người, tôi đã gặp không ít sự phản đối. Mọi người than phiền rằng nó làm chậm tốc độ code. Tuy nhiên, sau 2 tháng vận hành, chính những người phản đối mạnh nhất lại thấy biết ơn vì họ có thể tìm thấy bug cũ chỉ trong vài giây.

Vài mẹo nhỏ để workflow mượt mà hơn:

  • Dùng Git Hooks: Hãy cài husky để chặn các commit sai chuẩn. Nếu ai đó gõ sai, Git sẽ từ chối nhận code, buộc họ phải sửa lại cho đúng.
  • Tận dụng Scope: Luôn ghi rõ module bị ảnh hưởng như feat(api) hay fix(ui). Điều này giúp người review code biết ngay vùng nào cần tập trung nhất.
  • Sửa lỗi nhanh: Nếu lỡ commit sai, hãy dùng git commit --amend ngay để sửa thông điệp thay vì để lại một vết dơ trong lịch sử.

Chuẩn hóa commit message không phải là làm màu. Đó là nền tảng để bạn xây dựng hệ thống CI/CD chuyên nghiệp và giải phóng sức lao động. Hãy bắt đầu ngay hôm nay, lịch sử Git sạch sẽ chính là bộ mặt của một lập trình viên có tâm!

Share: