Jika Git terus mencantumkan file meskipun cocok dengan .gitignore, hapus file tersebut dari indeks Git sambil membiarkan salinan lokalnya tetap ada. Di Terminal, buka repositori, jalankan git rm --cached -- "path/to/file", lalu commit penghapusan yang telah di-stage tersebut beserta aturan pengabaiannya. Dokumentasi Git mengonfirmasi bahwa aturan pengabaian memengaruhi file yang tidak terlacak (untracked); aturan tersebut tidak berhenti melacak file yang sudah ada di dalam indeks. (Dokumentasi gitignore Git)

Mengapa .gitignore belum berhenti melacak file tersebut

Pola .gitignore memberi tahu Git untuk mengabaikan jalur tidak terlacak (untracked) yang cocok. Jika suatu file sudah ditambahkan ke repositori sebelumnya, Git akan terus melacak perubahannya terlepas dari aturan pengabaian yang ditambahkan belakangan. Aturan tersebut mungkin sudah benar namun tetap tampak tidak berpengaruh sampai Anda menghapus file tersebut dari indeks. (Dokumentasi gitignore Git)

Di Mac, buka Terminal dan beralihlah ke folder tingkat teratas repositori. Apple mendokumentasikan Terminal sebagai antarmuka baris perintah macOS dan mengidentifikasi zsh sebagai shell default; perintah di bawah ini berfungsi pada konfigurasi zsh standar. Pastikan Anda berada di repositori yang benar sebelum mengubah indeksnya:

git status

Jalur file pada perintah berikutnya bersifat relatif terhadap root repositori. Ganti contoh tersebut dengan jalur yang sebenarnya. Pertahankan tanda kutip: tanda kutip mencegah spasi dan karakter seperti * diinterpretasikan oleh shell. -- menandai akhir dari opsi, sehingga jalur yang dimulai dengan tanda hubung akan diperlakukan sebagai jalur.

Hapus file dari indeks dan pertahankan salinan Mac

Jalankan:

git rm --cached -- "path/to/file"

--cached menghapus jalur dari indeks Git, bukan dari working tree. File tersebut akan tetap berada di Mac Anda. Ini men-stage penghapusan untuk commit berikutnya; ini tidak menghapus riwayat commit file tersebut sebelumnya. (Dokumentasi git rm Git)

Jika jalur berada di dalam direktori dan Anda bermaksud berhenti melacak seluruh direktori tersebut, tambahkan -r dan gunakan jalurnya:

git rm --cached -r -- "path/to/directory"

Gunakan ini dengan hati-hati: Git menghapus semua jalur terlacak di bawah direktori tersebut dari indeks. File lokal tetap ada, tetapi penghapusannya telah di-stage. Jika Git menolak karena file memiliki perubahan yang di-stage atau isinya berbeda dari versi pada commit terbaru, hentikan dan periksa git status; jangan tambahkan -f kecuali Anda memahami perubahan ter-stage mana yang akan dibuang. Git mendokumentasikan pemaksaan (force) sebagai penggantian perlindungan normalnya untuk perubahan semacam itu. (Dokumentasi git rm Git)

Periksa aturan pengabaian dan tinjau apa yang akan di-commit

Pastikan pola .gitignore cocok dengan jalur dari lokasi file pengabaian tersebut. Misalnya, aturan di .gitignore pada root repositori yang berisi local-settings.json cocok dengan file bernama tersebut di tingkat direktori mana pun; /local-settings.json membatasi kecocokan hanya pada root repositori. Pola Git bersifat relatif terhadap direktori yang berisi .gitignore, dan file pengabaian di tingkat lebih rendah yang lebih spesifik dapat memengaruhi hasilnya. (Dokumentasi gitignore Git)

Tanyakan kepada Git aturan mana yang cocok dengan file yang sekarang tidak terlacak:

git check-ignore -v -- "path/to/file"

Opsi -v menampilkan sumber dan pola yang bertanggung jawab. Jika ini tidak menghasilkan apa-apa, periksa kembali ejaan, jalur, dan lokasi pola. FAQ Git merekomendasikan git rm --cached ditambah pola pengabaian yang cocok untuk berhenti melacak dan mengabaikan file yang sudah terlacak. (FAQ Git)

Tinjau perubahan yang di-stage dan salinan kerja sebelum melakukan commit:

git status

Status harus menunjukkan jalur di-stage sebagai dihapus (deleted) dan .gitignore sebagai diubah (modified) jika perubahannya belum di-stage. File kerja harus tetap ada. Stage file pengabaian jika diperlukan, lalu commit kedua perubahan tersebut:

git add -- .gitignore
git commit -m "Stop tracking local file"

Jika file pengabaian yang relevan berada di subdirektori, gunakan jalurnya yang relatif terhadap repositori pada git add. Tinjau git status lagi sebelum melakukan commit, terutama jika ada pekerjaan lain yang di-stage, agar commit hanya berisi perubahan yang Anda maksudkan.

Apa yang terjadi setelah commit

Setelah commit, Git tidak lagi melacak jalur tersebut di branch saat ini, dan aturan pengabaian mencegahnya ditambahkan kembali secara tidak sengaja. Commit tersebut mencatat sebuah penghapusan, sehingga kolaborator yang melakukan checkout pada commit tersebut akan melihat file terlacak dihapus dari working tree mereka; salinan terabaikan lokal milik masing-masing orang tidak otomatis dipertahankan oleh Git. Lakukan koordinasi sebelum melakukan commit jika file tersebut berisi konfigurasi bersama yang masih dibutuhkan oleh rekan tim. Versi yang di-commit sebelumnya tetap ada dalam riwayat repositori, sehingga prosedur ini tidak menghapus salinan di masa lalu. (Dokumentasi git rm Git)

Jika Anda hanya bermaksud menyembunyikan pengeditan lokal sambil tetap membiarkan file tersebut terlacak untuk semua orang, .gitignore bukanlah mekanisme yang tepat. Git menyarankan agar tidak menggunakan assume-unchanged atau skip-worktree untuk tujuan tersebut; alih-alih, pertimbangkan untuk menggunakan template yang terlacak dan file konfigurasi lokal terpisah yang diabaikan. (FAQ Git)

Sumber