guide

Mengabaikan file yang sudah di-commit

Cara berhenti melacak dengan git rm --cached file yang masih muncul setelah ditambahkan ke .gitignore, cara menemukan file terlacak yang cocok dengan aturan, dan urutan langkah jika rahasia sudah ter-commit.

Ini pertanyaan yang paling sering muncul. .gitignore hanya berlaku untuk file yang belum dilacak. File yang pernah di-commit tetap menampilkan perubahan meskipun aturannya sudah ditambahkan. Untuk berhenti melacaknya, file harus dikeluarkan dari indeks (area staging).

Satu file atau satu folder

# 1) tambahkan aturan ke .gitignore (mis. .env, dist/)
# 2) hapus dari indeks saja — file aslinya tetap ada di folder kerja
git rm --cached .env
git rm -r --cached dist/
# 3) commit
git commit -m "Stop tracking .env and dist"

Kuncinya adalah --cached. Tanpa opsi ini, git rm juga menghapus file dari folder kerja. Direktori memerlukan -r.

Menemukan file terlacak yang cocok dengan aturan

Untuk melihat apa saja yang terkena setelah menerapkan template baru, gunakan perintah berikut.

git ls-files -ci --exclude-standard

-c berarti file yang dilacak, -i hanya yang cocok dengan aturan abaikan, dan --exclude-standard menerapkan .gitignore, .git/info/exclude, serta konfigurasi global. Jika daftarnya benar, semuanya bisa dikeluarkan dari pelacakan sekaligus.

# bash / zsh
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached --
# PowerShell
git -c core.quotePath=false ls-files -ci --exclude-standard | ForEach-Object { git rm --cached -- "$_" }

Tab Berhenti melacak di generator menyusun perintah ini sesuai shell Anda.

Menerapkan ulang semuanya

Jika .gitignore banyak berubah, cara yang umum adalah mengosongkan indeks lalu menambahkan semuanya kembali.

git rm -r --cached .
git add .
git commit -m "Apply .gitignore"

git add . menerapkan aturan abaikan saat menambahkan kembali, jadi file yang diabaikan tidak ikut. Namun periksa daftar penghapusan dengan git status sebelum commit. Di repositori dengan pengaturan akhir baris (core.autocrlf) yang berbeda, banyak file bisa tampak berubah.

Dampak bagi orang lain

Setelah commit yang menghentikan pelacakan di-push, file tersebut terhapus dari folder kerja siapa pun yang melakukan pull atas commit itu. Dari sudut pandang git, file telah dihapus dari repositori. Jika file itu dibutuhkan masing-masing orang, seperti .env atau pengaturan IDE, beri tahu lebih dulu agar mereka membuat cadangan.

Jika rahasia sudah ter-push

Berhenti melacak hanya memengaruhi commit berikutnya. Di commit lama file itu masih ada dan siapa pun bisa mengambilnya dari riwayat. Urutannya sebagai berikut.

  1. Cabut dan terbitkan ulang kunci serta kata sandi yang terekspos lebih dulu. Ini yang paling penting.
  2. Hentikan pelacakan file dan tambahkan ke .gitignore.
  3. Bila perlu, hapus file dari riwayat dengan alat seperti git filter-repo lalu lakukan force push. Salinan yang sudah di-clone atau di-fork tidak ikut terhapus, jadi langkah ini tidak menggantikan langkah 1.

assume-unchanged dan skip-worktree bukan fitur abaikan

git update-index --assume-unchanged dan --skip-worktree menyembunyikan sementara perubahan file yang dilacak, tetapi file tetap dilacak.

Dokumentasi git sendiri menyarankan agar opsi-opsi ini tidak dipakai untuk mengabaikan perubahan file yang dilacak. Untuk file konfigurasi bersama, lebih aman meng-commit config.example.json dan mengabaikan config.json yang asli.

Referensi

← SebelumnyaAturan abaikan pribadi dengan .git/info/exclude