Daftar judul dari git log memberi tahu kapan sebuah perubahan tercatat dan siapa pencatatnya, tetapi judul saja tidak memperlihatkan baris mana yang benar-benar berubah. Perintah git diff menjawab pertanyaan itu: ia membandingkan dua keadaan berkas lalu mencetak perbedaannya baris demi baris. Tanpa argumen, pembandingnya adalah staging area — inilah bentuk yang paling sering dipakai sehari-hari. Chapter ini membedah format keluarannya satu per satu, mencoba dua suntingan nyata, lalu membandingkan dua commit lewat rentang hash.
Kembali ke Repository Latihan #
Repository bercabang dari chapter sebelumnya sudah menunaikan tugasnya, jadi kita kembali ke direktori latihan-dasar yang berisi enam commit:
cd ../latihan-dasar
git status -sOutput yang Dihasilkan:
?? draf-catatan.txtKeadaan bersih — hanya draf rapat yang tetap untracked. Sebagai bahan latihan, kita sunting glosarium.md dengan dua perubahan sekaligus: memperjelas definisi staging area dan menambah entri baru untuk tag:
printf '## Glosarium\n\n- commit: catatan satu keadaan proyek\n- staging area: keranjang perubahan terpilih sebelum commit\n- repository: wadah riwayat beserta berkasnya\n- working tree: salinan berkas yang sedang disunting\n- tag: penanda titik rilis versi\n' > glosarium.md
git diffOutput yang Dihasilkan:
diff --git a/glosarium.md b/glosarium.md
index 5e5d750..170e029 100644
--- a/glosarium.md
+++ b/glosarium.md
@@ -1,6 +1,7 @@
## Glosarium
- commit: catatan satu keadaan proyek
-- staging area: keranjang perubahan terpilih
+- staging area: keranjang perubahan terpilih sebelum commit
- repository: wadah riwayat beserta berkasnya
- working tree: salinan berkas yang sedang disunting
+- tag: penanda titik rilis versiTiga belas baris itu memuat seluruh informasi perbedaan antara staging area dan working tree. Angka pendek 5e5d750 dan 170e029 pada baris index adalah hash blob versi lama dan versi baru — hash berbeda di mesin pembaca karena hash dihitung dari isi berkas.
Membaca Keluaran Baris demi Baris #
Format di atas bernama unified diff — format yang sama dipakai patch di dunia Unix. Setiap jenis baris punya peran tetap:
| Baris keluaran | Arti |
|---|---|
diff --git a/glosarium.md b/glosarium.md | Kepala diff: berkas yang sedang dibandingkan |
index 5e5d750..170e029 100644 | Hash blob versi lama..versi baru, disusul mode berkas 100644 (berkas reguler) |
--- a/glosarium.md | Sisi lama perbandingan — awalan a/ berarti before |
+++ b/glosarium.md | Sisi baru perbandingan — awalan b/ berarti after |
@@ -1,6 +1,7 @@ | Kepala hunk: posisi perubahan pada sisi lama dan sisi baru |
| Baris berawalan spasi | Baris konteks — tidak berubah, ditampilkan sebagai pijakan lokasi |
Baris berawalan - | Baris versi lama yang dihapus atau diganti |
Baris berawalan + | Baris versi baru yang menggantikan atau menambah |
Kepala hunk @@ -1,6 +1,7 @@ adalah bagian yang paling sering membuat bingung, padahal polanya sederhana. Sisi kiri -1,6 berarti: pada berkas lama, hunk ini mulai di baris 1 dan membentang 6 baris. Sisi kanan +1,7 berarti: pada berkas baru, hunk yang sama mulai di baris 1 dan membentang 7 baris. Hitungannya cocok — baris konteks ada 5, baris lama yang diganti 1, jadi sisi lama 6 baris; sisi baru menambah 2 baris pengganti dan entri baru, total 7 baris.
Perubahan satu baris yang diganti selalu tampak sebagai pasangan - dan + — Git tidak menyimpan “baris diedit”, melainkan menghapus versi lama dan menambah versi baru. Itulah sebabnya statistik commit pada chapter git commit
menghitung satu suntingan sebagai satu deletion ditambah satu insertion.
Suntingan Kedua dan Batas git diff #
git diff tanpa argumen hanya membandingkan working tree dengan staging area — dan batas ini baru terasa ketika sebagian perubahan sudah di-stage. Kita tambahkan tautan belajar pada README.md lalu langsung stage:
printf '%s\n' '- Gittutorial: git-scm.com/docs/gittutorial' >> README.md
git add README.md
git status -sOutput yang Dihasilkan:
M README.md
M glosarium.md
?? draf-catatan.txtDua suntingan kini berada di dua kolom berbeda: README.md berkode M (perubahan di staging area), glosarium.md berkode M (perubahan di working tree) — persis tabel dua kolom dari chapter git status
. Perintah git diff dijalankan ulang pun keluarannya identik dengan blok pertama chapter ini: hanya glosarium.md, karena README.md sudah tidak berbeda dari staging area. Suntingan yang sudah di-stage berpindah ke pembanding lain:
git diff --cachedOutput yang Dihasilkan:
diff --git a/README.md b/README.md
index c1a5e96..0ec3163 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,4 @@ Bagian panduan pengguna ditambahkan di halaman utama.
## Referensi
- Pro Git: git-scm.com/book
+- Gittutorial: git-scm.com/docs/gittutorialTiga bentuk pembanding membentuk segitiga working tree — staging area — commit terakhir:
| Perintah | Membandingkan |
|---|---|
git diff | Working tree dengan staging area |
git diff --cached | Staging area dengan HEAD |
git diff HEAD | Working tree dengan HEAD — gabungan keduanya |
Bentuk ketiga menampilkannya sekaligus:
git diff HEADOutput yang Dihasilkan:
diff --git a/README.md b/README.md
index c1a5e96..0ec3163 100644
--- a/README.md
+++ b/README.md
@@ -5,3 +5,4 @@ Bagian panduan pengguna ditambahkan di halaman utama.
## Referensi
- Pro Git: git-scm.com/book
+- Gittutorial: git-scm.com/docs/gittutorial
diff --git a/glosarium.md b/glosarium.md
index 5e5d750..170e029 100644
--- a/glosarium.md
+++ b/glosarium.md
@@ -1,6 +1,7 @@
## Glosarium
- commit: catatan satu keadaan proyek
-- staging area: keranjang perubahan terpilih
+- staging area: keranjang perubahan terpilih sebelum commit
- repository: wadah riwayat beserta berkasnya
- working tree: salinan berkas yang sedang disunting
+- tag: penanda titik rilis versiKedua berkas muncul berurutan dalam satu keluaran — diff README.md disusul diff glosarium.md. Fase-fase perubahan di antara ketiga area ini — termasuk kasus satu berkas dengan dua lapis suntingan — dibahas tuntas pada section Melacak Perubahan
.
Ringkasan dengan –stat #
Untuk meninjau banyak berkas sekaligus, opsi --stat memampatkan setiap diff menjadi satu baris statistik:
git diff --statOutput yang Dihasilkan:
glosarium.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)Angka 3 di samping ++- menghitung total baris yang tersentuh: dua penambahan dan satu penghapusan. Tanda plus-minus di grafik kolom menunjukkan komposisi perubahan setiap berkas, dan dua baris terakhir merangkum seluruh berkas. Opsi ini pas dipakai sebelum commit sebagai pemeriksaan cepat — “berkas apa saja dan seberapa besar perubahannya” — tanpa membaca isi patchnya.
Membandingkan Dua Commit #
git diff juga menerima dua titik riwayat. Commit yang dipakai di sini adalah commit keempat b1b2ec8 (Tambah tanya jawab kontribusi) dan commit ketiga ea43d56 (Tambah panduan dan catatan rilis):
git diff ea43d56..b1b2ec8Output yang Dihasilkan:
diff --git a/docs/faq.md b/docs/faq.md
index 7570c2a..cb3c9f0 100644
--- a/docs/faq.md
+++ b/docs/faq.md
@@ -2,3 +2,6 @@
Q: Di mana melihat riwayat perubahan?
A: Lewat git log.
+
+Q: Bagaimana mulai berkontribusi?
+A: Mulai dari docs/panduan-instalasi.md.Rentang ea43d56..b1b2ec8 dibaca “perbedaan dari commit pertama menuju commit kedua” — hasilnya adalah isi patch commit kedua. Hash pada contoh akan berbeda di mesin pembaca, tapi polanya tetap: dua hash dipisah dua titik. Rentang yang lebih jauh tinggal dipadukan dengan --stat untuk meninjau sekilas:
git diff 462b791..ea43d56 --statOutput yang Dihasilkan:
CATATAN-RILIS.md | 3 +++
README.md | 6 +++++-
catatan-latihan.txt | 1 +
docs/agenda.txt | 1 +
docs/faq.md | 4 ++++
docs/panduan-instalasi.md | 3 +++
glosarium.md | 2 ++
7 files changed, 19 insertions(+), 1 deletion(-)Tujuh berkas, 19 baris ditambah, satu dihapus — persis statistik yang dilihat pada keluaran commit ea43d56 di chapter git commit
. Kombinasi rentang dan --stat seperti ini berguna untuk meninjau kumpulan commit sebelum dikirim ke rekan kerja. Daftar lengkap opsi git diff — termasuk mengabaikan whitespace — terdokumentasi pada dokumentasi git diff
dan dibahas lebih jauh pada section Melacak Perubahan
.
Menutup Latihan #
Latihan diff selesai; kedua suntingan kita urungkan dengan pasangan restore yang sudah dikenal dari chapter git add :
git restore --staged README.md
git restore README.md glosarium.md
git status -sOutput yang Dihasilkan:
?? draf-catatan.txtStaging area kosong, working tree kembali bersih, dan draf-catatan.txt tetap menunggu nasibnya. Repository kini berdiri di keadaan semula — enam commit, tanpa satu suntingan tersisa.
git diff menghubungkan dua titik — dua area kerja, atau dua commit. Kadang yang ingin kita periksa justru satu commit tunggal: siapa pembuatnya, pesannya, dan patch lengkapnya dalam satu tampilan. Untuk itu Git menyediakan git show
.