tutorial, git,

Git Log dan Diff: Cara Membaca Histori dan Melihat Perubahan Kode

Kiki/🎮🍉⌨️🍩💻 Kiki/🎮🍉⌨️🍩💻 Sep 11, 2026 · 6 mins read
Git Log dan Diff: Cara Membaca Histori dan Melihat Perubahan Kode
Share this

Salah satu kekuatan terbesar Git adalah kemampuannya merekam setiap perubahan secara detail. Dengan git log dan git diff, kamu bisa menjawab pertanyaan penting: “Apa yang berubah?”, “Kapan berubahnya?”, “Siapa yang mengubahnya?”, dan “Mengapa berubah?”. Dua perintah ini adalah alat investigasi paling berguna saat debugging atau code review.


git log — Membaca Histori Commit

Log Dasar

git log

Output:

commit a1b2c3d4e5f6789012345678901234567890abcd (HEAD -> main)
Author: Miftakhuddin <me@kiki.my.id>
Date:   Wed Sep 10 09:00:00 2026 +0700

    feat(auth): tambah fitur login dengan Google OAuth

commit b2c3d4e5f6789012345678901234567890abcde1 (origin/main)
Author: Miftakhuddin <me@kiki.my.id>
Date:   Tue Sep 09 15:30:00 2026 +0700

    fix: perbaiki validasi email di form registrasi

Format Log yang Berguna

# Satu baris per commit (paling sering dipakai)
git log --oneline
# a1b2c3d feat(auth): tambah fitur login dengan Google OAuth
# b2c3d4e fix: perbaiki validasi email di form registrasi

# Dengan graph branch — sangat berguna untuk melihat struktur branch
git log --oneline --graph --decorate --all

# Tampilkan file yang berubah di setiap commit
git log --stat

# Tampilkan patch (diff) di setiap commit
git log -p

# N commit terakhir saja
git log -5 --oneline

# Log antara dua commit
git log abc123..def456 --oneline

# Log sejak tanggal tertentu
git log --since="2026-09-01" --oneline
git log --after="1 week ago" --oneline

# Log sampai tanggal tertentu
git log --until="2026-09-10" --oneline

Filter Log

# Berdasarkan penulis
git log --author="Miftakhuddin" --oneline
git log --author="@kiki.my.id" --oneline   # bisa partial match

# Berdasarkan pesan commit (case-insensitive)
git log --grep="feat" --oneline
git log --grep="fix" -i --oneline

# Berdasarkan perubahan konten file (sangat berguna!)
# Tampilkan commit yang pernah menambah/hapus string tertentu
git log -S "function loginUser" --oneline
git log -G "password" --oneline    # mendukung regex

# Berdasarkan file
git log -- src/auth.js --oneline
git log -- "*.js" --oneline

# Gabungkan filter
git log --author="Miftakhuddin" --since="1 month ago" --oneline

Format Kustom

# Format sendiri dengan placeholder
git log --pretty=format:"%h | %an | %ar | %s"
# a1b2c3d | Miftakhuddin | 2 hours ago | feat: tambah login

# Placeholder yang berguna:
# %H  = commit hash penuh
# %h  = commit hash pendek
# %an = author name
# %ae = author email
# %ar = author date, relative (2 hours ago)
# %ad = author date
# %s  = subject (baris pertama pesan commit)
# %b  = body (sisa pesan commit)

# Format dengan warna
git log --pretty=format:"%C(yellow)%h%Creset %C(cyan)%an%Creset %s"

git diff — Melihat Perubahan Detail

git diff menampilkan perbedaan baris per baris antara dua versi file.

Membaca Output Diff

git diff
diff --git a/src/auth.js b/src/auth.js
index 1234567..abcdefg 100644
--- a/src/auth.js      ← versi lama
+++ b/src/auth.js      ← versi baru
@@ -10,7 +10,9 @@     ← lokasi perubahan (baris 10, 7 baris lama → 9 baris baru)
 function login(email, password) {
-  if (!email) return false;
+  if (!email || !password) {
+    throw new Error('Email dan password wajib diisi');
+  }
   return authenticate(email, password);
 }
  • Baris dengan - (merah): baris yang dihapus
  • Baris dengan + (hijau): baris yang ditambah
  • Baris tanpa tanda: konteks (tidak berubah)

Variasi git diff

# Perubahan di working directory (belum di-stage)
git diff

# Perubahan di staging area (sudah di-add, belum di-commit)
git diff --staged
git diff --cached    # sama dengan --staged

# Perubahan di working directory DAN staging sekaligus
git diff HEAD

# Diff antara dua commit
git diff a1b2c3d b2c3d4e

# Diff antara dua branch
git diff main feature/login

# Diff file tertentu saja
git diff src/auth.js

# Hanya tampilkan nama file yang berubah (tanpa detail)
git diff --name-only
git diff --name-status   # dengan status (M=modified, A=added, D=deleted)

# Diff commit tertentu dengan versi sebelumnya
git diff a1b2c3d~1 a1b2c3d    # ~ berarti "parent commit"
git show a1b2c3d               # cara lebih mudah melihat diff satu commit

git show — Detail Satu Commit

# Lihat detail commit tertentu
git show a1b2c3d

# Lihat commit terakhir
git show HEAD

# Lihat commit 3 sebelum HEAD
git show HEAD~3

# Hanya nama file yang berubah
git show --name-only a1b2c3d

# Lihat isi file tertentu di commit tertentu
git show a1b2c3d:src/auth.js

git blame — Siapa yang Mengubah Baris Ini?

git blame menampilkan setiap baris file beserta informasi commit terakhir yang mengubahnya — sangat berguna saat menemukan bug.

git blame src/auth.js
a1b2c3d4 (Miftakhuddin  2026-09-10 09:00:00 +0700  1) function login(email, password) {
b2c3d4e5 (Sari          2026-09-08 14:00:00 +0700  2)   if (!email) return false;
a1b2c3d4 (Miftakhuddin  2026-09-10 09:00:00 +0700  3)   return authenticate(email, password);
a1b2c3d4 (Miftakhuddin  2026-09-10 09:00:00 +0700  4) }
# Blame hanya baris 10-20
git blame -L 10,20 src/auth.js

# Abaikan perubahan whitespace
git blame -w src/auth.js

# Tampilkan email penulis
git blame -e src/auth.js

git bisect — Binary Search untuk Menemukan Bug

Saat ada bug yang kamu tahu tidak ada di versi lama tapi ada sekarang, git bisect membantu menemukan commit mana yang memperkenalkan bug tersebut menggunakan binary search.

# Mulai sesi bisect
git bisect start

# Tandai kondisi saat ini sebagai "buruk" (ada bug)
git bisect bad

# Tandai commit lama yang diketahui tidak ada bug
git bisect good v1.0.0
# atau
git bisect good a1b2c3d

# Git akan checkout commit di tengah — test apakah bug ada
# Jika ada bug:
git bisect bad
# Jika tidak ada bug:
git bisect good

# Ulangi hingga Git menemukan commit penyebab bug
# Setelah selesai, reset ke kondisi semula
git bisect reset

Alias untuk Log yang Lebih Nyaman

Tambahkan alias ini ke konfigurasi Git:

git config --global alias.lg "log --oneline --graph --decorate --all"
git config --global alias.lp "log -p --follow"
git config --global alias.ls "log --stat --oneline"

Kesimpulan

git log dan git diff adalah alat investigasi yang sangat powerful. Dengan menguasai filter dan format yang berbeda, kamu bisa menjawab hampir semua pertanyaan tentang histori kode. Di artikel berikutnya, kita bahas cara membatalkan perubahan di Git — dari unstage, discard changes, hingga amend commit.

Kiki/🎮🍉⌨️🍩💻
Written by Kiki/🎮🍉⌨️🍩💻
hello I'm friend K.