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/🎮🍉⌨️🍩💻