Back to Blogs

[ID] Semantic Commit Message

GitGitHubCommit
Lazuardi Akbar Imani 2026-07-14
[ID] Semantic Commit Message

Semantic Commit Message

Panduan lengkap tentang Semantic Commit Message - standar untuk menulis pesan commit yang konsisten, terstruktur, dan mudah dipahami.

© Dezkrazzer

📋 Daftar Isi

Pengenalan

Semantic Commit Message adalah konvensi penulisan pesan commit yang mengikuti standar tertentu. Standar ini membantu:

  • Membaca history commit dengan lebih mudah
  • Mengotomatisasi versioning dan changelog
  • Kolaborasi tim menjadi lebih baik
  • Tracking changes menjadi lebih terstruktur

Format Commit

Format standar Semantic Commit Message adalah:

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

<body>

<footer>

Penjelasan:

BagianDeskripsi
typeJenis commit (feat, fix, docs, dll)
scopeBagian/modul yang diubah (opsional)
subjectDeskripsi singkat perubahan (imperatif, lowercase)
bodyPenjelasan detail tentang perubahan (opsional)
footerInformasi tambahan seperti issue number (opsional)

Contoh Format:

feat(authentication): tambahkan fitur login dengan OAuth

Menambahkan integrasi OAuth 2.0 untuk meningkatkan keamanan.
Pengguna dapat login menggunakan akun Google atau GitHub.

Closes #123

Jenis-jenis Commit

TipeNamaDeskripsiContoh
featFeatureMenambahkan fitur barufeat: tambahkan fitur login
fixBug FixMemperbaiki bug atau errorfix: perbaiki crash saat upload gambar besar
docsDocumentationMengubah dokumentasi (README, Wiki)docs: update panduan instalasi di README
styleStylePerubahan format code (spasi, titik koma) tanpa mengubah logikastyle: hapus spasi berlebih di header
refactorRefactorMengubah struktur code tanpa menambah fitur atau perbaikan bugrefactor: sederhanakan logika fungsi hitung gaji
perfPerformancePeningkatan code untuk meningkatkan performaperf: optimasi query database untuk user list
testTestMenambahkan atau memperbaiki testingtest: tambahkan unit test untuk module pembayaran
choreChoreTugas-tugas kecil, update dependency, atau build scriptchore: update versi discord.js ke v14
buildBuildPerubahan sistem build (npm, gradle, gulp)build: tambahkan script minify css
ciCIPerubahan pada file konfigurasi CI (GitHub Actions, Jenkins)ci: perbaiki script deploy ke vercel
revertRevertMembatalkan commit sebelumnyarevert: batalkan commit a2b3c4

Contoh Penggunaan

1. Feature Baru

feat(user-profile): tambahkan halaman profil pengguna

- Menambahkan halaman profil yang menampilkan informasi pengguna
- Pengguna dapat mengedit foto profil
- Menambahkan fitur follow/unfollow user

Closes #45

2. Perbaikan Bug

fix(checkout): perbaiki error pada form pembayaran

Mengatasi issue dimana form pembayaran tidak mengirim data
ketika user menggunakan browser Safari.

Bug terjadi karena validasi email yang tidak kompatibel dengan Safari.

Closes #89

3. Update Dokumentasi

docs(README): update instruksi setup project

- Tambahkan requirement system yang jelas
- Perbaiki step-step instalasi yang membingungkan
- Tambahkan troubleshooting section

4. Refactoring Code

refactor(auth): pisahkan logika authentikasi dari controller

Memindahkan logika authentikasi dari UserController ke 
AuthService untuk meningkatkan reusability dan testability.

5. Performance Improvement

perf(database): gunakan connection pooling untuk DB queries

Mengurangi waktu response dari 200ms menjadi 50ms dengan
mengimplementasikan connection pooling di database layer.

6. Testing

test(payment): tambahkan test cases untuk payment gateway

- Test successful payment
- Test failed payment
- Test timeout handling
- Test refund process

7. Perubahan Dependencies

chore(dependencies): upgrade React dari v17 ke v18

- Update semua React dependencies
- Fix breaking changes di components
- Update testing library versions

8. CI/CD Configuration

ci(github-actions): tambahkan workflow untuk automated testing

Menambahkan GitHub Actions workflow yang:
- Menjalankan linter pada setiap pull request
- Menjalankan unit tests secara otomatis
- Generate coverage report

Best Practices

✅ Lakukan

  • Gunakan imperative mood: "tambahkan" bukan "ditambahkan" atau "menambahkan"
  • Jangan capitalize huruf pertama subject: feat: tambahkan... bukan feat: Tambahkan...
  • Jangan gunakan period di akhir subject: feat: tambahkan fitur bukan feat: tambahkan fitur.
  • Pisahkan subject dari body dengan baris kosong
  • Wrap body pada 72 karakter
  • Jelaskan what dan why, bukan how
  • Reference issues pada footer: Closes #123, Fixes #456
  • Commit yang atomic: satu commit untuk satu perubahan logis

❌ Jangan Lakukan

# ❌ Buruk - tidak deskriptif
git commit -m "update code"

# ❌ Buruk - tanpa type
git commit -m "tambahkan halaman login"

# ❌ Buruk - type tidak valid
git commit -m "add(feature): login page"

# ❌ Buruk - terlalu banyak perubahan dalam satu commit
git commit -m "feat: tambahkan login, dashboard, dan payment"

✅ Bagus

git commit -m "feat(auth): tambahkan halaman login dengan OAuth"
git commit -m "fix(checkout): perbaiki validasi email di form pembayaran"
git commit -m "docs: update README dengan instruksi setup"

Tools & Integrasi

Commitizen

Tool untuk memudahkan pembuatan semantic commit message:

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

# Gunakan dengan
git cz

Husky + Commitlint

Otomatisasi validasi commit message:

npm install husky commitlint --save-dev

npx husky install
npx husky add .husky/commit-msg 'npx --no -- commitlint --edit "$1"'

File: commitlint.config.js

module.exports = {
  extends: ['@commitlint/config-conventional'],
};

Pre-commit Hook

Validasi sebelum commit dilakukan:

npm install --save-dev @commitlint/cli

Git Aliases

Buat alias untuk mempermudah:

git config --global alias.com 'commit -m'
git config --global alias.f 'fetch'
git config --global alias.p 'push'

Keuntungan

📊 Automated Changelog

Dengan semantic commit message, changelog dapat di-generate otomatis:

## [1.2.0] - 2024-01-15

### Added
- feat: tambahkan fitur login dengan OAuth
- feat(dashboard): tambahkan widget analytics

### Fixed
- fix: perbaiki crash saat upload gambar besar
- fix(checkout): validasi email form pembayaran

### Changed
- refactor: sederhanakan logika fungsi hitung gaji

🔄 Automated Versioning

Menggunakan Semantic Versioning (MAJOR.MINOR.PATCH):

  • MAJOR: ketika ada breaking changes
  • MINOR: ketika ada fitur baru yang backward compatible
  • PATCH: ketika ada bug fix

🔍 Better Code Review

Reviewer dapat lebih mudah memahami intent dari perubahan melalui pesan commit yang jelas.

📝 Cleaner History

History commit menjadi lebih rapi dan mudah di-trace:

git log --oneline

Output yang terstruktur dan mudah dibaca.

🔄 Easier Bisecting

Mencari commit yang menyebabkan bug lebih mudah dengan konvensi yang konsisten.

Referensi


Dibuat untuk membantu tim memahami dan mengimplementasikan Semantic Commit Message dengan baik.