# Conventional Commits: Panduan Lengkap untuk Commit Git yang Terstruktur dan Siap Otomasi

# Apa Itu Conventional Commits?

**Conventional Commits** adalah spesifikasi standar untuk menulis pesan *commit* dalam Git dengan format yang terstruktur dan konsisten.  
Tujuannya adalah untuk:

* Membuat riwayat perubahan kode lebih mudah dipahami oleh manusia maupun mesin
    
* Mempercepat proses *code review*
    
* Mendukung otomatisasi *changelog*, *semantic release*, hingga deployment
    

Dengan template yang jelas, Conventional Commits sangat membantu tim software engineer, terutama dalam proyek yang berskala besar.

# Mengapa Conventional Commits Penting dalam Version Control?

Banyak tim mengalami kendala seperti:

* Commit message yang tidak jelas dan sulit dilacak
    
* Sulit membuat changelog manual
    
* Rilis versi (major, minor, patch) tidak konsisten
    

Dengan **Conventional Commits + Semantic Versioning (SemVer)**, semua proses itu bisa diotomatisasi.

# Format Standard Conventional Commits (Cara Menulis Yang Benar)

Format umum Conventional Commits:

```powershell
<type>[optional scope]: <deskripsi singkat>

[optional body]

[optional footer(s)]
```

### Contoh commit yang benar:

```powershell
feat(auth): add JWT-based user login

User can now log in using email and password.
JWT token valid for 24 hours.

BREAKING CHANGE: legacy login endpoint has been removed.
```

# Tipe Commit yang Didukung Conventional Commits

Berikut ini daftar *type* yang umum digunakan dalam **Conventional Commits Git workflow:**

| **Tipe** | **Deskripsi** | **Memicu Rilis?** |
| --- | --- | --- |
| `feat` | Penambahan fitur | Minor |
| `fix` | Perbaikan bug | Patch |
| `docs` | Pembaruan dokumentasi | Tidak |
| `style` | Perubahan format/tata gaya kode | Tidak |
| `refactor` | Perubahan kode internal tanpa mengubah fungsionalitas | Tidak |
| `test` | Menambah/memperbaiki unit test | Tidak |
| `chore` | Update build/dependencies | Tidak |
| `perf` | Peningkatan performa | Patch |
| `BREAKING CHANGE` | Perubahan besar (breaking) | Major |

# Menambahkan Scope pada Commit (Opsional Tapi Bermanfaat)

Scope digunakan untuk menunjukkan area kode yang terpengaruh.

Contoh:

```powershell
feat(api): add rate limiting
fix(ui): correct button alignment
```

Scope sangat membantu jika kamu bekerja di proyek dengan banyak modul atau **monorepo**.

# Cara Memaksa Format Conventional Commits (Linting Otomatis)

Untuk menjaga konsistensi, kamu bisa memaksa commit message agar sesuai format dengan tools seperti:

* **commitlint**
    
* **husky**
    
* **Commitizen**
    

Setup `commitlint` + `husky` di Node.js

```powershell
npm install --save-dev @commitlint/{config-conventional,cli} husky
```

Buat file `.commitlintrc.js`:

```powershell
module.exports = {
  extends: ["@commitlint/config-conventional"]
};
```

Aktifkan commit message hook:

```powershell
npx husky install
npx husky add .husky/commit-msg "npx commitlint --edit $1"
```

Dengan setup ini, commit yang melanggar aturan akan ditolak.

# Integrasi dengan Semantic Versioning dan CI/CD Otomatis

Karena format commit dapat dipahami oleh mesin, berbagai otomatisasi dapat dilakukan berdasarkan tipe commit, seperti:

* Menentukan rilis versi secara otomatis:
    
    * `feat:` → rilis **minor**
        
    * `fix:` → rilis **patch**
        
    * `BREAKING CHANGE:` → rilis **major**
        
* Membuat changelog otomatis
    
* Men-trigger deployment ke staging/production
    

⛓️ Tools populer untuk ini:

* `semantic-release`
    
* `standard-version`
    

# Best Practices dalam Menggunakan Conventional Commits

✅ Gunakan deskripsi singkat yang jelas (&lt; 50 karakter)  
✅ Tambahkan body jika perlu jelaskan “kenapa” perubahan dilakukan  
✅ Tulis footer hanya jika commit terkait issue tracker (misalnya `Closes #42`)  
✅ Konsisten menggunakan prefix seperti `feat:`, `fix:`, `refactor:`  
✅ Setiap pull request mengandung satu atau beberapa commit terstruktur

# Kesimpulan

**Conventional Commits** membantu developer menulis commit yang terstruktur, mudah dilacak, dan siap diotomatisasi.

Dengan memadukan commit yang konsisten + git workflow + semantic versioning, kamu akan mendapatkan:

🚀 Riwayat kode lebih bersih  
🛠️ Proses rilis lebih cepat dan minim error  
📊 Changelog otomatis  
🤝 Kolaborasi tim lebih mudah

> “Commit yang baik adalah investasi di masa depan.”

Mulailah terapkan **Conventional Commits** hari ini pada proyekmu.  
Install `commitlint` atau gunakan `Commitizen` untuk mempermudah penulisan commit interaktif.
