gitdiffMenengah4 mnt baca

git diff: Melihat Perubahan Baris per Baris

Membaca format diff: plus minus, hunk header, dan tiga varian diff yang wajib dikuasai.

Tiga varian diff

git diff punya tiga mode tergantung dua titik apa yang dibandingkan. Ini konsep yang sama dengan tiga area kerja, jadi kalau modul itu sudah paham, bagian ini akan terasa mudah:

bash
git diff            # working dir vs staging (yang belum di-add)
git diff --staged   # staging vs commit terakhir (calon isi commit)
git diff HEAD       # working dir vs commit terakhir (semua perubahan)

Hafalkan ketiganya. Kebanyakan kebingungan pemula ("kok diff-ku kosong padahal file berubah?") selesai begitu paham bahwa git diff polos tidak menampilkan yang sudah di-staging. Kalau diff kosong tapi git status menunjukkan perubahan, hampir pasti perubahannya sudah di-staging, jadi pakai git diff --staged.

bash
git diff --staged
bash
diff --git a/gaya.css b/gaya.css
index e69de29..a1b2c3d 100644
--- a/gaya.css
+++ b/gaya.css
@@ -0,0 +1,2 @@
+body { color: navy; }
+h1 { font-size: 2rem; }

Contoh nyata 1: membaca format diff baris per baris

Ubah satu file lalu lihat diff-nya:

bash
git diff
bash
diff --git a/index.html b/index.html
index 3a2f1c9..9b4e2d1 100644
--- a/index.html
+++ b/index.html
@@ -1,3 +1,4 @@
 <h1>Halo</h1>
-<p>Lama</p>
+<p>Baru</p>
+<p>Tambahan</p>

Cara membacanya:

  • Baris diff --git: nama file yang dibandingkan.
  • Baris --- / +++: file "sebelum" dan "sesudah". Konvensi a/ dan b/ hanyalah penanda, bukan folder sungguhan.
  • @@ -1,3 +1,4 @@: hunk header, lokasi baris. Artinya: di file lama mulai baris 1 sebanyak 3 baris, di file baru mulai baris 1 sebanyak 4 baris.
  • Baris -: dihapus dari versi lama. Baris +: ditambah di versi baru. Baris tanpa tanda: konteks yang tidak berubah, ditampilkan supaya kamu tahu posisi perubahan.
  • Satu file bisa punya beberapa hunk kalau perubahannya berjauhan; tiap hunk punya header @@ sendiri.

Contoh nyata 2: diff antar commit dan antar branch

Diff tidak hanya untuk perubahan yang belum di-commit. Kamu bisa membandingkan dua titik mana pun dalam riwayat:

bash
git diff a3f9c1d 7b2e4aa --stat
bash
 index.html | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
bash
git diff main..fitur-login --stat
bash
 login.html | 20 ++++++++++++++++++++
 app.js     | 15 +++++++++++++++
 2 files changed, 35 insertions(+)

Sangat berguna sebelum merge: git diff main..fitur-login --stat memberi gambaran "seberapa besar PR ini?" dalam satu detik. Reviewer senior selalu menjalankan ini sebelum membaca kode baris per baris.

Catatan teknis: diff Git memakai algoritma Myers secara default untuk menemukan perbedaan terkecil antar dua versi file. Untuk file yang hanya dipindah blok besarnya (misalnya fungsi dipindah ke bawah), diff biasa terlihat seperti hapus besar + tambah besar. Opsi git diff --color-moved mewarnai baris yang pindah dengan warna berbeda, membuat review jauh lebih mudah dibaca.

Kapan memakai git diff?

Sebelum setiap commit (cek --staged, seperti mengecek belanjaan sebelum bayar), sebelum merge (bandingkan branch untuk mengukur ukuran perubahan), dan saat review kode teman (inilah "naskah" yang dibaca reviewer). Programmer senior menghabiskan banyak waktu membaca diff; ini skill yang compounding, makin sering dibaca makin cepat paham.

Tantangan

Baca diff buta

Minta teman membuat satu perubahan kecil di repo latihanmu TANPA memberitahumu apa itu. Lalu jalankan git diff dan tebak: file apa, baris mana, ditambah atau dihapus? Ulangi 3 ronde, bergantian peran.