Menulis pesan commit

Konvensi pesan commit dan disiplin commit atomik yang membuat riwayat mudah dibaca dan ditelusuri.

Daftar isi

Pesan commit adalah satu-satunya catatan tentang niat di balik sebuah perubahan, dan satu-satunya bagian commit yang ditulis manusia untuk dibaca manusia. Topik ini membahas bentuk pesan commit yang baik, disiplin commit atomik yang menjaga setiap rekaman tetap dapat ditafsirkan, serta cara menulis pesan melalui opsi -m dan editor. Riwayat yang baik terbentuk dari keduanya, bukan dari hafalan perintah.

Bentuk pesan yang baik#

Pesan commit yang baik terdiri atas subjek singkat dan, apabila perlu, badan penjelasan. Subjek memuat ringkasan perubahan dalam satu baris yang panjangnya idealnya sekitar 50 karakter, ditulis dalam kalimat perintah, dan tidak diakhiri titik. Badan pesan, yang dipisahkan oleh satu baris kosong dari subjeknya, menjelaskan mengapa perubahan itu dilakukan dan konteks yang tidak terlihat dari kodenya. Lebar badan yang lazim adalah sekitar 72 karakter agar terbaca nyaman pada layar terminal.

Perbandingan berikut menunjukkan subjek yang sering ditemui pada riwayat yang buruk dan padanannya yang informatif.

Subjek yang samarSubjek yang informatif
perbaikan bugPerbaiki pembagian nol pada hitung_diskon()
updatePerbarui panduan instalasi ke Git 2.40
final fixTangani input kosong pada form pendaftaran
wipTambah uji kasus stok nol

Subjek yang informatif memakai kalimat perintah karena melengkapi kalimat bawaan Git: commit ini mengaplikasikan perubahan yang, jika dibaca sebagai kalimat, terdengar seperti perintah. Kontras dua kolom di atas juga memperlihatkan hal lain: subjek yang baik menyebut objek teknisnya secara spesifik, sehingga pencarian riwayat dengan kata kunci menjadi mungkin.

Opsi -m dapat dipanggil dua kali dalam satu perintah, dan argumen pertama menjadi subjek sedangkan argumen kedua menjadi badan.

bash
# tanggal commit ditetapkan agar keluaran contoh dapat direproduksi secara persis
export GIT_AUTHOR_DATE="2026-11-01T09:00:00+07:00"
export GIT_COMMITTER_DATE="2026-11-01T09:00:00+07:00"
bash
rm -rf /tmp/lab-pesan
mkdir /tmp/lab-pesan
cd /tmp/lab-pesan
git init -b main
git config user.name "Budi"
git config user.email "[email protected]"
printf "stok = 10\n" > stok.txt
git add stok.txt
git commit -m "Perbaiki hitung sisa stok" -m "Fungsi hitung_sisa() kini menambahkan kembali item yang dibatalkan agar angka stok sesuai catatan gudang."
text Keluaran
Initialized empty Git repository in /tmp/lab-pesan/.git/
[main (root-commit) 791b9ef] Perbaiki hitung sisa stok
 1 file changed, 1 insertion(+)
 create mode 100644 stok.txt

Struktur dua bagian itu dapat diperiksa pada git log.

bash
git log -1
text Keluaran
commit 791b9ef0f5ee86a847814db82e5e9b4e318566c9
Author: Budi <[email protected]>
Date:   Sun Nov 1 09:00:00 2026 +0700

    Perbaiki hitung sisa stok

    Fungsi hitung_sisa() kini menambahkan kembali item yang dibatalkan agar angka stok sesuai catatan gudang.

Subjek dan badan tampil terpisah oleh baris kosong, sesuai bentuk yang ditetapkan. Pesan yang ditulis pada saat commit, bukan ditulis ulang belakangan, cenderung lebih akurat karena konteksnya masih segar.

Commit atomik#

Commit atomik adalah commit yang berisi satu gagasan yang utuh dan dapat dijelaskan dalam satu subjek. Pecahan yang terlalu kecil seperti memisahkan deklarasi dan pemakaiannya membuat riwayat berisik, sedangkan commit raksasa yang mencampur fitur baru, perbaikan bug, dan pemformatan ulang berkas membuat setiap bagian sulit ditelusuri. Ukuran yang sehat adalah batas antar gagasan, bukan batas jumlah baris.

Disiplin ini dibayar dengan kemampuan yang muncul secara gratis. Commit atomik dapat dikembalikan satu per satu tanpa membawa bagian lain, dapat ditinjau dalam waktu singkat oleh pemeriksa kode, dan dapat ditemukan oleh pencarian riwayat karena subjeknya spesifik. Sebaliknya, commit campuran memaksa peninjau membaca semuanya untuk memahami sebagiannya. Kebiasaan yang menjaga atomisitas adalah menstaging per berkas atau per hunk, sebagaimana dibahas pada modul Memulai, lalu memberi commit sesuai isi staging area itu.

Tanpa opsi -m, Git membuka editor dengan templat yang berisi komentar petunjuk. Baris yang diawali pagar dibuang otomatis, sehingga teks yang tersisa itulah pesannya. Cara ini paling cocok untuk badan pesan yang panjang, karena editor menyediakan pembungkusan baris dan pengecekan ejaan milik penggunanya. Editor yang dipakai mengikuti urutan konfigurasi GIT_EDITOR, core.editor, kemudian variabel EDITOR milik shell.

Kebiasaan yang menjaga kualitas riwayat adalah membaca ulang subjek sebelum menutup editor, karena subjek itulah yang tampil pada git log --oneline, daftar commit layar platform, dan baris pencarian riwayat.

Ringkasan#

  • Subjek commit ditulis singkat dalam kalimat perintah, dan badan penjelasan dipisahkan satu baris kosong dengan lebar sekitar 72 karakter.
  • Dua opsi -m menghasilkan subjek dan badan, sedangkan pemanggilan tanpa -m membuka editor pesan.
  • Commit atomik berisi satu gagasan utuh, sehingga dapat dikembalikan, ditinjau, dan dicari secara independen.
  • Kualitas riwayat ditentukan saat commit dibuat, bukan saat riwayat ditata ulang.

Referensi#