git show, blame, dan bisect: Detektif Kode
Melacak siapa mengubah baris apa dan kapan, sampai menemukan commit penyebab bug otomatis.
git show: bedah satu commit
git log menampilkan daftar commit, tapi kalau kamu ingin melihat isi lengkap satu commit tertentu (pesan, penulis, tanggal, plus diff-nya), pakai git show:
git show a3f9c1dcommit a3f9c1d2e4b6a8f0c1d3e5f7a9b1d3f5a7b9c1d3e
Author: Namamu <[email protected]>
Date: Thu Oct 8 09:30:00 2026 +0700
Tambah halaman kontak
diff --git a/kontak.html b/kontak.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/kontak.html
@@ -0,0 +1 @@
+<h1>Kontak</h1>Tanpa argumen, git show menampilkan commit terakhir (HEAD). Ini cara tercepat menjawab "commit kemarin itu ngapain saja?" tanpa harus membuka banyak perintah. Kamu juga bisa membatasi tampilannya, misalnya git show --stat a3f9c1d kalau hanya ingin ringkasan file tanpa diff lengkap.
git blame: siapa menulis baris ini?
Pernah melihat satu baris kode yang aneh dan bertanya-tanya "siapa yang nulis ini dan kenapa begini?" git blame menjawabnya dengan memberi anotasi setiap baris dengan commit terakhir yang menyentuhnya:
git blame index.htmla3f9c1d (Namamu 2026-10-08 09:30) <h1>Halo</h1>
7b2e4aa (Rina 2026-10-08 10:12) <p>Baru</p>
c1d08f3 (Budi 2026-10-07 14:40) <footer>Kontak</footer>Setiap baris menunjukkan hash commit, penulis, tanggal, dan isi barisnya. Dari sini kamu bisa lanjut dengan git show 7b2e4aa untuk melihat konteks lengkap kenapa baris itu ditulis.
Kapan dipakai: ada baris aneh dan kamu ingin bertanya ke penulisnya, atau ingin tahu konteks kenapa baris itu ditulis begitu sebelum kamu berani mengubahnya. Catatan etika yang penting: blame untuk memahami, bukan untuk menyalahkan. Semua orang pernah menulis kode jelek, termasuk kamu, termasuk programmer paling senior sekalipun. Pakai informasi ini untuk bertanya baik-baik, bukan untuk menuding.
git bisect: berburu bug dengan pencarian biner
Skenario klasik: "kemarin fitur ini masih jalan, sekarang error". Di antara kemarin dan sekarang ada 50 commit. Mengecek satu per satu itu lambat. git bisect memakai pencarian biner (binary search): Git otomatis checkout commit tengah-tengah, kamu tes, lalu lapor bagus atau rusak, dan Git mempersempit setengah sisanya. Ulangi sampai ketemu satu commit pelakunya.
git bisect start
git bisect bad # kondisi sekarang: rusak
git bisect good a3f9c1d # commit lama yang masih bagusBisecting: 25 revisions left to test after this (roughly 5 steps)
[7b2e4aa] Perbaiki validasi emailGit checkout commit tengah (di sini 7b2e4aa) dan memberitahumu kira-kira butuh 5 langkah. Kamu tes aplikasinya di commit ini, lalu lapor:
git bisect good # kalau di commit ini masih bagus
git bisect bad # kalau di commit ini sudah rusakUlangi tes dan lapor sampai Git menunjuk pelakunya:
7b2e4aa is the first bad commitSelesai? Jangan lupa kembali ke posisi semula:
git bisect resetTanpa reset, kamu tetap "nyangkut" di commit tengah hasil pencarian. reset mengembalikan branch-mu ke keadaan sebelum bisect dimulai.
Catatan teknis: bisect memakai pencarian biner sehingga 100 commit hanya butuh sekitar 7 langkah tes, bukan 100. Bisa diotomatisasi penuh kalau proyekmu punya test suite:
git bisect run npm testakan menjalankan test-mu di tiap langkah dan menentukan good/bad sendiri sampai pelakunya ketemu, tanpa interaksi manual sama sekali. Syaratnya: commit yang ditandaigoodmemang harus benar-benar lolos test.
Kapan memakai ketiganya?
show: bedah satu commit spesifik. "Commit kemarin itu ngapain saja?"blame: lacak asal satu baris. "Siapa yang nulis baris aneh ini dan kenapa?"bisect: temukan commit penyebab bug di riwayat panjang. "Sejak commit mana fitur ini rusak?"
Ketiganya adalah toolkit debugging yang tidak ada di editor mana pun. Editor bisa menunjukkan kode saat ini, tapi hanya Git yang bisa menjawab pertanyaan tentang masa lalu kode tersebut.
Tantangan
Simulasi bisect
Buat 6 commit berurutan di repo latihan (tiap commit tambah satu baris ke riwayat.txt). Anggap commit ke-4 sebagai 'bug' (tulis kata RUSAK di barisnya). Jalankan git bisect dengan good = commit 1 dan bad = commit 6. Catat berapa langkah sampai Git menemukan commit 4, lalu git bisect reset.