Diff paling jujur sekaligus paling mudah berisik: satu tindakan format ulang — menambah indentasi, merapikan spasi — mengubah puluhan baris yang isinya sebenarnya tidak berubah, dan keluaran diff menampilkan semuanya sebagai perubahan. Review menjadi lambat karena mata harus menyaring mana perubahan nyata dan mana hanya whitespace. Perintah git diff membawa seperangkat opsi persis untuk situasi ini: menyaring whitespace saat mencocokkan baris, mengatur jumlah baris konteks, membandingkan kata demi kata, sampai mendeteksi whitespace yang justru tidak boleh ada. Chapter ini menguji masing-masing pada berkas uji yang memuat dua jenis perubahan sekaligus — reindentasi dan suntingan nyata — supaya efek tiap opsi terlihat kontras.
Medan Uji: Indentasi dan Suntingan Nyata #
Repository latihan memuat daftar langkah panduan.md tanpa indentasi. Suntingan berikutnya mengindentasi seluruh daftar dan sekaligus mengubah isi langkah ketiga — perubahan nyata yang bersembunyi di balik derau:
mkdir latihan-ws && cd latihan-ws
git init -b main
git config user.name "Budi Santoso"
git config user.email "[email protected]"
printf '# Panduan Kontributor\n\n1. Fork repository.\n2. Buat branch baru.\n3. Kirim pull request.\n\n## Standar Pesan Commit\n\nGunakan kata kerja aktif pada awal pesan.\nBatasi subjek sampai 50 karakter.\n' > panduan.md
git add panduan.md
git commit -m "Tambah panduan kontributor"
printf '# Panduan Kontributor\n\n 1. Fork repository.\n 2. Buat branch baru.\n 3. Kirim pull request setelah seluruh uji lulus.\n\n## Standar Pesan Commit\n\nGunakan kata kerja aktif pada awal pesan.\nBatasi subjek sampai 50 karakter.\n' > panduan.md
git diffOutput yang Dihasilkan:
[main (root-commit) 54a96f3] Tambah panduan kontributor
1 file changed, 10 insertions(+)
create mode 100644 panduan.md
diff --git a/panduan.md b/panduan.md
index d46106e..c73c62a 100644
--- a/panduan.md
+++ b/panduan.md
@@ -1,8 +1,8 @@
# Panduan Kontributor
-1. Fork repository.
-2. Buat branch baru.
-3. Kirim pull request.
+ 1. Fork repository.
+ 2. Buat branch baru.
+ 3. Kirim pull request setelah seluruh uji lulus.
## Standar Pesan Commit
Tiga baris daftar tampak berubah, padahal dua di antaranya hanya bertambah indentasi empat spasi. Hanya langkah ketiga yang isinya benar-benar berubah. Hash 54a96f3 milik commit akan berbeda di mesin pembaca.
-w: Mengabaikan Semua Whitespace #
Opsi -w — bentuk panjangnya --ignore-all-space — mengubah aturan pencocokan baris: dua baris dianggap sama selama isinya identik setelah semua whitespace dibuang:
git diff -wOutput yang Dihasilkan:
diff --git a/panduan.md b/panduan.md
index d46106e..c73c62a 100644
--- a/panduan.md
+++ b/panduan.md
@@ -2,7 +2,7 @@
1. Fork repository.
2. Buat branch baru.
-3. Kirim pull request.
+ 3. Kirim pull request setelah seluruh uji lulus.
## Standar Pesan Commit
Derau reindentasi hilang: langkah pertama dan kedua tidak lagi dihitung sebagai perubahan. Yang tersisa satu pasangan baris — suntingan nyata pada langkah ketiga. Perhatikan bentuk tampilannya: baris konteks ditampilkan dalam versi barunya (berindentasi), baris - dalam versi lamanya (tanpa indentasi) — -w mengubah keputusan “baris ini berubah atau tidak”, bukan isi tampilan tiap sisi. Hunk headernya pun bergeser ke @@ -2,7 +2,7 @@ karena jumlah baris yang dihitung berubah.
-b: Mengabaikan Perubahan Jumlah Spasi #
Opsi -b — --ignore-space-change — lebih selektif: jumlah whitespace yang sudah ada disetarakan (dua spasi dianggap sama dengan satu), tetapi munculnya whitespace baru di posisi yang tadinya kosong tetap dihitung sebagai perubahan. Akibatnya penambahan indentasi seperti contoh di atas tetap tampil pada git diff -b — keluarannya identik dengan diff tanpa opsi. Kedua opsi baru terasa bedanya pada perubahan jumlah spasi di tengah baris:
printf 'Baris pertama catatan.\nBaris kedua dengan spasi ganda.\n' > catatan.md
git add catatan.md
git commit -m "Tambah catatan kerja"
printf 'Baris pertama catatan.\nBaris kedua dengan spasi ganda.\n' > catatan.md
git diff catatan.mdOutput yang Dihasilkan:
[main 9502630] Tambah catatan kerja
1 file changed, 2 insertions(+)
create mode 100644 catatan.md
diff --git a/catatan.md b/catatan.md
index a5490af..b0c0031 100644
--- a/catatan.md
+++ b/catatan.md
@@ -1,2 +1,2 @@
Baris pertama catatan.
-Baris kedua dengan spasi ganda.
+Baris kedua dengan spasi ganda.Perbedaan satu-satunya pada berkas ini: spasi ganda menjadi spasi tunggal. Ulangi pemeriksaan dengan opsi penyaring:
git diff -b catatan.mdPerintah ini tidak mencetak apa pun — pada -b, kedua versi baris dianggap sama karena hanya berbeda jumlah spasi. Opsi -w juga menyembunyikan perubahan ini; ringkasnya, -b menyaring sebagian derau whitespace, -w menyaring semuanya.
Tugas catatan.md sebagai bahan uji sudah selesai. Pulihkan berkas itu ke versi commit terakhir dengan git restore catatan.md — perintah senyap yang sudah kita kenal pada chapter Membuang Perubahan Lokal
. Dengan begitu satu-satunya perubahan yang tersisa adalah reindentasi panduan.md, dan keluaran opsi-opsi berikutnya membaca satu berkas yang sama:
git restore catatan.md-U<n>: Mengatur Baris Konteks #
Baris konteks — tiga baris tak berubah di sekeliling tiap perubahan, dibahas pada chapter Melihat Perbedaan Perubahan
— bisa diperbanyak atau dihilangkan lewat -U<n>, dengan -U3 sebagai nilai bawaan:
git diff -U1
git diff -U0Output yang Dihasilkan:
diff --git a/panduan.md b/panduan.md
index d46106e..c73c62a 100644
--- a/panduan.md
+++ b/panduan.md
@@ -2,5 +2,5 @@
-1. Fork repository.
-2. Buat branch baru.
-3. Kirim pull request.
+ 1. Fork repository.
+ 2. Buat branch baru.
+ 3. Kirim pull request setelah seluruh uji lulus.
diff --git a/panduan.md b/panduan.md
index d46106e..c73c62a 100644
--- a/panduan.md
+++ b/panduan.md
@@ -3,3 +3,3 @@
-1. Fork repository.
-2. Buat branch baru.
-3. Kirim pull request.
+ 1. Fork repository.
+ 2. Buat branch baru.
+ 3. Kirim pull request setelah seluruh uji lulus.Dua keluaran di atas berurutan berasal dari kedua perintah. -U1 menyisakan satu baris konteks di tiap sisi; -U0 meniadakannya sehingga hunk hanya memuat baris yang benar-benar berubah — perhatikan hunk header berganti menjadi @@ -3,3 +3,3 @@ karena baris yang dihitung menyusut. Diff -U0 ringkas untuk menghitung perubahan; konteks yang lebih lebar justru dibutuhkan saat posisi perubahan penting untuk dipahami.
–word-diff: Perubahan Kata demi Kata #
Untuk suntingan kecil di kalimat panjang, perbandingan per baris terasa kasar: satu kata yang berganti membuat seluruh baris tampak hilang-muncul. Opsi --word-diff menandai perubahan pada tingkat kata:
git diff --word-diffOutput yang Dihasilkan:
diff --git a/panduan.md b/panduan.md
index d46106e..c73c62a 100644
--- a/panduan.md
+++ b/panduan.md
@@ -1,8 +1,8 @@
# Panduan Kontributor
1. Fork repository.
2. Buat branch baru.
3. Kirim pull [-request.-]{+request setelah seluruh uji lulus.+}
## Standar Pesan CommitPenanda [-...-] mengurung kata yang dihapus dan {+...+} mengurung kata yang ditambahkan; bagian kalimat yang tidak berubah tampil utuh tanpa penanda. Kata-kata reindentasi tidak ditandai karena whitespace bukan bagian dari kata — pergeseran indentasi hanya terlihat dari bentuk barisnya. Keluaran mode ini memang tidak berawalan spasi seperti diff biasa; formatnya diganti total agar penanda kata menonjol.
–check: Mendeteksi Whitespace yang Salah #
Penyaringan whitespace berguna saat membaca; sebaliknya, beberapa pola whitespace justru tidak boleh lolos ke commit — spasi menggantung di ujung baris, spasi sebelum tab pada indentasi. Opsi --check memeriksa baris-baris baru pada diff dan melaporkan pelanggarannya:
printf 'Ulasan pengguna aplikasi.\nMenunggu rangkuman.\n' > ulasan.md
git add ulasan.md
git commit -m "Tambah catatan ulasan pengguna"
printf 'Ulasan pengguna aplikasi.\nUlasan baru sedang diverifikasi. \n \tRingkasan menyusul.\nMenunggu rangkuman.\n' > ulasan.md
git diff --checkOutput yang Dihasilkan:
[main bc28616] Tambah catatan ulasan pengguna
1 file changed, 2 insertions(+)
create mode 100644 ulasan.md
ulasan.md:2: trailing whitespace.
+Ulasan baru sedang diverifikasi.
ulasan.md:3: space before tab in indent.
+ Ringkasan menyusul.Setiap pelanggaran dilaporkan dengan format berkas:baris: jenis kesalahan lalu barisnya dikutip. Dua baris baru pada ulasan.md melanggar dua aturan berbeda: spasi menggantung (trailing whitespace) dan indentasi berisi spasi sebelum tab (space before tab in indent). Perintah ini mengembalikan kode status 2 ketika menemukan masalah — sifat yang membuatnya cocok dipasang pada pemeriksaan otomatis; pemeriksaan pada isi keranjang tinggal menggabungkan git diff --staged --check.
Kapan Memakai Apa #
| Opsi | Efek | Saat tepat |
|---|---|---|
| tanpa opsi | semua perubahan tampil | review biasa, keluaran masih terbaca |
-w | semua whitespace diabaikan saat mencocokkan | review logika setelah format ulang besar |
-b | perubahan jumlah spasi diabaikan | menyaring spasi ganda tanpa menyembunyikan indentasi baru |
-U<n> | jumlah baris konteks berubah | meringkas atau memperluas konteks pembacaan |
--word-diff | penandaan perubahan kata | suntingan redaksional pada kalimat panjang |
--check | laporan whitespace terlarang | pemeriksaan sebelum commit |
Seluruh opsi ini berlaku pada semua bentuk git diff yang sudah kita kenal — termasuk --staged dan diff antar commit; rincian tiap opsi tercatat pada dokumentasi git diff
. Dengan kotak peralatan diff lengkap, satu hal terakhir yang tersisa: merangkai semuanya menjadi kebiasaan pemeriksaan sebelum commit. Lanjut ke Memeriksa Perubahan Sebelum Commit
.