Melacak Satu File: git log --follow
Pelajari git log --follow dan pemisah -- untuk menelusuri seluruh riwayat satu file, termasuk masa sebelum file itu diganti nama.
Kenapa riwayat satu file itu penting
git blame menjawab "siapa mengubah baris ini". Tapi kadang pertanyaanmu lebih besar: "file ini awalnya seperti apa, kapan diganti nama, dan commit apa saja yang pernah menyentuhnya?" Untuk itu kamu butuh git log yang difilter ke satu path. Kenapa fitur ini ada? Karena di project nyata, file berpindah dan berganti nama terus, dan tanpa filter kamu harus menggali ratusan commit yang tidak relevan.
Tanda -- : memisahkan revisi dari path
git log --oneline -- README.mdTanda -- memberitahu Git: "semua yang setelah ini adalah path file, bukan nama branch atau commit." Tanpa --, Git bisa bingung kalau nama filemu kebetulan sama dengan nama branch. Contoh: file bernama main atau test akan ditafsir sebagai revisi dan perintahnya gagal atau menampilkan hal yang salah. Aturannya sederhana: setiap kali memberi path ke git log, pasang -- sebelumnya. Selalu aman, tidak pernah rugi.
Kamu juga bisa memberi folder, bukan cuma file:
git log --oneline -- src/components/Ini menampilkan semua commit yang menyentuh file apa pun di dalam folder itu. Berguna untuk menjawab "kapan terakhir folder ini berubah?" saat kamu mewarisi kode orang lain.
--follow: mengejar file yang diganti nama
Masalahnya: Git tidak benar-benar "tahu" sebuah file diganti nama. Rename hanyalah hapus file lama plus tambah file baru yang isinya mirip. Jadi perintah ini berhenti di titik rename:
git log --oneline -- src/Button.tsxContoh output (berhenti di rename):
d4e5f66 Ganti styling button
b7c8d99 Rename btn.tsx menjadi Button.tsxRiwayat sebelum rename hilang. Solusinya, tambah --follow:
git log --oneline --follow -- src/Button.tsxContoh output (riwayat penuh):
d4e5f66 Ganti styling button
b7c8d99 Rename btn.tsx menjadi Button.tsx
a1b2c33 Tambah komponen btnGit mendeteksi kemiripan isi dan "mengikuti" file melewati rename. Kapan dipakai? Saat kamu menelusuri bug di file yang sudah beberapa kali pindah nama, atau saat audit "siapa yang pertama kali menulis file ini". Tanpa --follow, kamu akan salah menyimpulkan file itu baru berumur 2 commit padahal sudah 2 tahun.
Batasan penting: --follow hanya bekerja untuk SATU file, tidak untuk folder atau banyak path. Ini keterbatasan teknis cara Git melacak kemiripan isi.
Melihat isi perubahan tiap commit
Tambahkan -p untuk melihat diff setiap commit yang menyentuh file itu:
git log --oneline --follow -p -- src/Button.tsx | head -60Kamu mendapat cerita lengkap file itu dari lahir sampai sekarang, lengkap dengan tiap perubahannya. Kapan dipakai? Saat kamu curiga sebuah baris "tiba-tiba berubah" dan ingin tahu commit mana yang mengubahnya beserta konteks diff-nya.
Kesalahan umum pemula
Salah: git log namafile tanpa --, lalu bingung kenapa Git error "unknown revision" padahal file-nya ada.
Benar: git log --oneline -- namafile. Tanda -- menghilangkan ambiguitas antara nama revisi dan nama path.
Salah: menyimpulkan umur file dari git log -- file biasa, padahal file itu hasil rename sehingga riwayat lamanya tidak terlihat.
Benar: pakai git log --oneline --follow -- file untuk satu file agar rename ikut terkejar, dan ingat --follow tidak berlaku untuk folder.
Tantangan
Lacak file yang pernah diganti nama
Cari satu file di repomu yang pernah diganti nama (atau buat skenario: rename sebuah file lalu commit). Bandingkan output git log -- file biasa vs git log --follow -- file, dan catat commit apa saja yang hanya muncul di versi --follow.