gitdiffbranchMenengah5 mnt baca

Membandingkan Branch dengan git diff

Bandingkan dua branch dengan sintaks dua titik dan tiga titik, plus --stat, --name-only, dan --word-diff untuk ringkasan cepat.

Pertanyaan yang ingin dijawab

Sebelum merge atau membuat pull request, kamu perlu menjawab: "apa sebenarnya yang berubah di branch ini dibanding main?" git diff bisa membandingkan dua titik mana pun, bukan cuma working tree. Kenapa kemampuan ini ada? Karena review kode yang baik dimulai dari memahami cakupan perubahan, dan menebak dari ingatan adalah cara paling tidak bisa diandalkan.

Dua titik: ujung lawan ujung

bash
git diff main..fitur-login

Dua titik membandingkan ujung (tip) kedua branch secara langsung: apa bedanya isi main saat ini dengan isi fitur-login saat ini. Ini SAMA PERSIS dengan menulis git diff main fitur-login, titik-titiknya opsional.

Contoh output ringkas:

bash
diff --git a/login.js b/login.js
index 3a2b1c4..9d8e7f6 100644
--- a/login.js
+++ b/login.js
@@ -1,3 +1,5 @@
+function validasiEmail(email) {
+  return email.includes("@");
+}
 function login(user) {

Kapan dipakai? Saat kamu ingin tahu perbedaan total dua snapshot, misalnya membandingkan tag rilis v1.0 dengan v2.0.

Tiga titik: "apa yang branch ini kerjakan?"

bash
git diff main...fitur-login

Tiga titik jauh lebih berguna untuk review. Git mencari merge-base, yaitu commit terakhir yang sama-sama dimiliki kedua branch, lalu membandingkan merge-base itu dengan ujung fitur-login. Hasilnya: hanya perubahan yang DIBUAT di branch fitur-login sejak ia bercabang, tanpa tercampur perubahan yang masuk ke main belakangan.

Kapan dipakai? Hampir selalu saat review sebelum merge atau PR. Inilah juga logika diff yang dipakai GitHub di halaman pull request. Kalau main sudah maju 10 commit sejak kamu branching, dua titik akan menampilkan kekacauan campuran, sedangkan tiga titik tetap bersih menunjukkan pekerjaanmu saja.

--stat: ringkasan per file

bash
git diff --stat main...fitur-login

Contoh output:

bash
 login.js      | 12 +++++++++++-
 style.css     |  4 +++-
 2 files changed, 14 insertions(+), 2 deletions(-)

Setiap file dapat satu baris dengan grafik plus-minus. Kapan dipakai? Sebagai "daftar isi" sebelum membaca diff lengkap. Kalau --stat menunjukkan 47 file berubah padahal kamu cuma niat ubah 2 file, itu sinyal ada yang salah, misalnya file build ikut ke-commit.

--name-only dan --word-diff

bash
git diff --name-only main...fitur-login

Hanya nama file, tanpa detail. Kapan dipakai? Untuk skrip atau saat kamu cuma butuh daftar file untuk dioper ke perintah lain.

bash
git diff --word-diff main...fitur-login -- README.md

Menampilkan perubahan per kata, bukan per baris. Untuk file teks seperti dokumentasi, diff per baris sering menampilkan satu paragraf panjang sebagai "dihapus lalu ditambah", padahal yang berubah cuma satu kata. --word-diff menandai kata yang berubah saja sehingga review dokumen jauh lebih nyaman.

Kesalahan umum pemula

Salah: memakai git diff main..fitur (dua titik) untuk review PR, lalu bingung kenapa diff-nya memuat perubahan orang lain yang masuk ke main belakangan. Benar: pakai tiga titik git diff main...fitur untuk melihat murni pekerjaan branch fitur sejak bercabang.

Salah: langsung membaca diff baris per baris untuk PR besar tanpa melihat gambaran besarnya dulu. Benar: mulai dari git diff --stat main...fitur untuk menilai cakupan. Kalau cakupannya tidak masuk akal, berhentilah sebelum tenggelam di detail.

Tantangan

Bandingkan dua titik vs tiga titik

Buat branch fitur dari main, commit 1 perubahan di fitur, lalu commit 1 perubahan berbeda di main. Jalankan git diff main..fitur dan git diff main...fitur, lalu jelaskan dengan kata-katamu kenapa outputnya berbeda.