Chapter Anatomi Commit memperlihatkan bahwa pesan commit adalah bagian resmi dari identitas commit — bagian yang ikut di-hash dan ikut diwariskan ke setiap clone. Enam bulan setelah sebuah commit dibuat, diff-nya mungkin sudah tidak relevan, tetapi pesannya sering menjadi satu-satunya penjelasan mengapa sebuah keputusan diambil. Pesan generik seperti update atau perbaikan membuang modal itu. Chapter ini membahas struktur pesan yang bisa dibaca mesin sekaligus manusia — subjek ringkas, baris kosong, body yang menjelaskan apa dan mengapa — lalu menempuh ketiga cara menuliskannya: -m ganda, editor, dan berkas -F.

Tiga Bagian Pesan: Subjek, Baris Kosong, Body #

Pesan commit yang baik berbentuk surat singkat — satu baris judul, satu baris kosong, lalu isi:

text
Batasi tampilan daftar ke 10 baris

Halaman depan melambat karena seluruh isi catatan dirender
sekaligus. Batasan 10 baris menjaga halaman tetap ringan;
catatan penuh tetap terbuka lewat tautan judul.

Aturannya ringkas:

  1. Subjek — maksimal sekitar 50 karakter, diawali kata kerja imperatif, tanpa titik penutup.
  2. Baris kosong — pemisah wajib antara subjek dan body.
  3. Body — dibungkus pada sekitar 72 karakter per baris; menjelaskan apa yang dikerjakan dan mengapa keputusan itu diambil.

Body sengaja tidak menjelaskan bagaimana perubahan dikerjakan — diff sudah menunjukkan bagaimana dengan tepat. Body menjelaskan hal-hal yang tidak terbaca dari diff: latar masalah, alasan memilih satu pendekatan dibanding alternatifnya, dan efek yang diharapkan.

Mulai dari Subjek Saja #

Commit kecil yang maksudnya jelas dari judulnya boleh berhenti di subjek. Kita buat repository latihan ringkasan fitur dan catat commit pertamanya:

bash
mkdir latihan-pesan && cd latihan-pesan
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf 'Daftar fitur:\n1. simpan catatan\n2. tampilkan daftar\n' > ringkasan.txt
git add ringkasan.txt
git commit -m "Tambah ringkasan fitur awal"

Output yang Dihasilkan:

text
[main (root-commit) ff7842c] Tambah ringkasan fitur awal
 1 file changed, 3 insertions(+)
 create mode 100644 ringkasan.txt

Satu -m membawa satu baris pesan. Selama subjek Tambah ringkasan fitur awal sudah cukup menjelaskan isi snapshot, tambahan body justru menjadi derau.

Body lewat Dua -m #

Commit berikutnya memuat keputusan yang butuh alasan. Opsi -m yang diulang menjadi paragraf-paragraf terpisah — -m pertama menjadi subjek, -m kedua menjadi body:

bash
printf 'Daftar fitur:\n1. simpan catatan\n2. tampilkan daftar\n3. batasi tampilan 10 baris\n' > ringkasan.txt
git add ringkasan.txt
git commit -m "Batasi tampilan daftar ke 10 baris" \
           -m "Halaman depan melambat karena seluruh isi catatan dirender sekaligus. Batasan 10 baris menjaga halaman tetap ringan; catatan penuh tetap terbuka lewat tautan judul."

Output yang Dihasilkan:

text
[main fe38c7a] Batasi tampilan daftar ke 10 baris
 1 file changed, 1 insertion(+)

Ringkasan commit hanya menampilkan subjeknya; struktur lengkap tersimpan di objek. Kita baca kembali:

bash
git log -1

Output yang Dihasilkan:

text
commit fe38c7a3b2d154aa9b2364d17d2ad2ebdb1b27fb
Author: Budi Santoso <[email protected]>
Date:   Tue Oct 13 09:20:00 2026 +0700

    Batasi tampilan daftar ke 10 baris
    
    Halaman depan melambat karena seluruh isi catatan dirender sekaligus. Batasan 10 baris menjaga halaman tetap ringan; catatan penuh tetap terbuka lewat tautan judul.

Bedah strukturnya: subjek Batasi tampilan daftar ke 10 baris menjawab apa; body menjawab mengapa — halaman depan melambat — sekaligus menyimpan keputusan desainnya, yaitu catatan penuh tetap dapat dibuka lewat tautan judul. Baris pemisah kosong di antara keduanya dibuat otomatis oleh Git ketika pesan disimpan.

Lewat Editor #

Untuk pesan panjang, mengetik di editor lebih nyaman daripada argumen -m yang panjang. Menjalankan git commit tanpa -m membuka editor berisi templat:

bash
printf 'Daftar fitur:\n1. simpan catatan\n2. tampilkan daftar\n3. batasi tampilan 10 baris\n4. urutkan sesuai tanggal\n' > ringkasan.txt
git add ringkasan.txt
git commit

Buffer editor yang terbuka berisi pesan kosong diikuti komentar status:

text

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch main
# Changes to be committed:
#	modified:   ringkasan.txt
#

Kita menulis pesan pada bagian atas, lalu menyimpan berkas dan menutup editor — commit segera tercatat. Baris-baris yang diawali # diabaikan Git; baris tersebut memuat status staging sebagai pengingat apa saja yang akan dicatat. Pesan yang dibiarkan kosong — tanpa baris selain komentar — membatalkan commit, persis perilaku Aborting commit due to empty commit message. yang pernah kita tangkap di section Instalasi dan Konfigurasi . Editor mana yang terbuka diatur lewat core.editor, dibahas pada chapter Konfigurasi Editor .

Lewat Berkas dengan -F #

Pesan yang disusun di luar terminal — hasil rapat, draf tinjauan kode — bisa dicatat lewat berkas dengan opsi -F:

bash
printf 'Daftar fitur:\n1. simpan catatan\n2. tampilkan daftar\n3. batasi tampilan 10 baris\n4. urutkan sesuai tanggal\n5. statistik catatan mingguan\n' > ringkasan.txt
cat > pesan-commit.txt <<'EOF'
Ringkas statistik catatan mingguan

Laporan mingguan kini memuat jumlah catatan baru per pekan.
Statistik membantu pemilik proyek menilai tren pencatatan tim.
EOF
git add ringkasan.txt
git commit -F pesan-commit.txt

Output yang Dihasilkan:

text
[main 7f76b06] Ringkas statistik catatan mingguan
 1 file changed, 1 insertion(+)

Berkas pesan dibaca apa adanya — struktur subjek, baris kosong, dan body mengikuti isi berkasnya, dalam hal ini tiga baris pesan yang tersimpan utuh:

bash
git log -1

Output yang Dihasilkan:

text
commit 7f76b06d4106afcebf6ce835df382d6c1e1b24a7
Author: Budi Santoso <[email protected]>
Date:   Tue Oct 13 10:00:00 2026 +0700

    Ringkas statistik catatan mingguan
    
    Laporan mingguan kini memuat jumlah catatan baru per pekan.
    Statistik membantu pemilik proyek menilai tren pencatatan tim.

Ketiga jalur ini menghasilkan struktur pesan yang sama; pilihannya cuma soal kenyamanan:

CaraPerintahCocok untuk
-m gandagit commit -m "subjek" -m "body"pesan singkat yang diketik langsung
Editorgit commitpesan panjang yang ditulis-diedit di tempat
Berkasgit commit -F pesan.txtpesan yang sudah ada di berkas, atau hasil kolaborasi

Contoh Baik dan Buruk #

Perbandingan konkret membuat standarnya cepat terasa:

BurukBaikMasalahnya
updatePerbaiki validasi email saat pendaftarantidak menjelaskan apa yang berubah
perbaikanBatasi tampilan daftar ke 10 baristidak bisa dicari kembali lewat --grep
menambahkan fitur baruTambah ekspor catatan ke berkasbukan imperatif; subjek menggantung
Tambah if-else di baris 42Tolak token kadaluarsa saat masukmenjelaskan bagaimana, bukan apa
Perbaiki bug yang dilaporkan Siti kemarin di rapat tentang autentikasiPerbaiki token kedaluwarsa di autentikasisubjek 50+ karakter; detail rapat milik body

Konvensi Bahasa: Imperatif dan Campuran yang Sehat #

Subjek bahasa Indonesia yang baik memakai kata kerja imperatif: Tambah, Perbaiki, Hapus, Pindahkan, Ringkas. Ujiannya sederhana — subjek harus melengkapi kalimat “jika commit ini diterapkan, repository akan …”. Bentuk benda atau pasif seperti penambahan fitur atau diperbaiki membuat ujian itu gagal. Body bebas memakai naratif biasa, dan istilah teknis tetap dalam bahasa Inggris sebagaimana konvensi seluruh Course: commit, token, staging, bukan “komitmen” atau “penanda panggung”.

Riwayat latihan kita yang sudah terkumpul memperlihatkan kesan akhirnya:

bash
git log --oneline

Output yang Dihasilkan:

text
7f76b06 Ringkas statistik catatan mingguan
61738cf Tambah fitur urutkan sesuai tanggal
fe38c7a Batasi tampilan daftar ke 10 baris
ff7842c Tambah ringkasan fitur awal

Empat subjek imperatif, masing-masing bisa dibaca tanpa membuka diff-nya. Struktur ini juga menjadi fondasi ketika tim menginginkan lebih: format baku type(scope): deskripsi yang bisa dibaca mesin pembuat changelog. Format itu — Conventional Commits — dibahas di chapter berikutnya: Conventional Commits .