guide/read-unified-diff.md

Cara Membaca unified diff (patch) — Panduan untuk Tinjauan Kode

Membaca satu per satu dengan contoh: header --- dan +++, angka pada header hunk @@, baris konteks, penanda No newline at end of file, dan header tambahan diff --git.

Terakhir diperbarui: 2026-09-23

Sebagian besar patch yang beredar dalam tinjauan kode, laporan isu, dan email menggunakan format unified diff. git diff, diff -u, dan "raw diff" di GitHub semuanya memakai format ini. Awalnya simbolnya tampak banyak, tetapi aturannya sederhana.

Bentuk keseluruhan

diff --git a/greet.py b/greet.pyindex 3b18e51..a6f4c2d 100644--- a/greet.py+++ b/greet.py@@ -1,5 +1,6 @@ def greet(name):-    print("Hello " + name)+    message = f"Hello, {name}!"+    print(message)  def main():     greet("world")

Dari atas ke bawah terdapat header tambahan git, header file (---, +++), dan hunk (bongkahan yang diawali @@). Satu file bisa memiliki beberapa hunk, dan satu patch bisa berisi beberapa file.

Header file: --- dan +++

Header hunk @@ -a,b +c,d @@

@@ -1,5 +1,6 @@ berarti hunk ini menampilkan "5 baris dari file sebelum diubah mulai baris 1, dan 6 baris dari file setelah diubah mulai baris 1".

Mari hitung sendiri: baris konteks (yang diawali spasi) pada contoh di atas ada 4, yaitu def greet(name):, baris kosong, def main():, dan greet("world"). Jumlah baris sebelum diubah adalah 4 baris konteks ditambah 1 baris - = 5, dan setelah diubah 4 baris konteks ditambah 2 baris + = 6, sehingga header-nya menjadi -1,5 +1,6.

Tiga jenis baris di badan hunk

Karakter pertamaArti
SpasiBaris konteks yang sama di kedua sisi
-Baris yang hanya ada sebelum diubah (dihapus)
+Baris yang hanya ada setelah diubah (ditambah)

Konteks bawaan adalah 3 baris sebelum dan sesudah perubahan (bisa diubah, misalnya git diff -U5). Baris konteks dipakai untuk menemukan posisi yang tepat saat patch diterapkan. Meskipun nomor barisnya sedikit bergeser, jika konteksnya cocok, patch akan menerapkannya dengan menggeser posisi (offset).

Satu baris yang diedit muncul sebagai pasangan baris - lalu baris +. Format unified tidak punya simbol khusus untuk "diubah", jadi kiatnya adalah membaca kelompok - dan kelompok + yang berurutan sambil mencocokkannya dari atas ke bawah.

\ No newline at end of file

@@ -1,2 +1,2 @@ host=example.com-port=8080\ No newline at end of file+port=8080

Ini menandakan bahwa baris tepat di atasnya adalah baris terakhir file dan tidak ada karakter baris baru di ujungnya. Pada contoh di atas isinya sama, dan baris baru terakhir hanya ditambahkan pada file setelah diubah. Penjelasan lengkapnya ada di Karakter akhir baris dan perbedaan tak terlihat.

Header tambahan git

Baris-baris setelah diff --git a/path b/path adalah informasi tambahan khas git.

Kiat berguna saat meninjau

  1. Lihat dulu selisih jumlah baris di header hunk untuk memperkirakan besar perubahan. -10,7 +10,30 berarti bertambah 23 baris.
  2. Untuk menyaring hunk yang hanya berubah spasinya, gunakan git diff -w. Ini sangat berguna saat meninjau commit yang mencampur perapian indentasi dengan perubahan nyata (Opsi abaikan spasi).
  3. Untuk melihat apa yang berubah di dalam baris, gunakan git diff --word-diff, atau masukkan ke alat yang mendukung sorotan dalam baris seperti situs ini.
  4. Sebelum menerapkan patch, periksa dulu dengan git apply --check file.patch apakah patch dapat diterapkan dengan bersih. Jika bukan repositori git, gunakan patch -p1 --dry-run < file.patch.

Coba di alat ini

Tampilan gabungan di Pembanding Teks menampilkan kelompok - lalu kelompok + dengan urutan yang sama seperti format ini, dan menyorot sekali lagi kata yang berubah di dalam baris. Menekan tombol patch di bilah hasil akan menyalin teks unified diff standar, dan tombol simpan di sebelahnya mengunduh file diff.patch. Patch yang dibuat dengan semua opsi pengabaian dimatikan dapat diterapkan ke file asli dengan patch -p1 atau git apply.

Buka pembanding teks