gitlogriwayatMenengah5 mnt baca

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

bash
git log --oneline -- README.md

Tanda -- 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:

bash
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:

bash
git log --oneline -- src/Button.tsx

Contoh output (berhenti di rename):

bash
d4e5f66 Ganti styling button
b7c8d99 Rename btn.tsx menjadi Button.tsx

Riwayat sebelum rename hilang. Solusinya, tambah --follow:

bash
git log --oneline --follow -- src/Button.tsx

Contoh output (riwayat penuh):

bash
d4e5f66 Ganti styling button
b7c8d99 Rename btn.tsx menjadi Button.tsx
a1b2c33 Tambah komponen btn

Git 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:

bash
git log --oneline --follow -p -- src/Button.tsx | head -60

Kamu 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.