SSS · Git'te yanlış dosyayı commit ettim (içinde şifre var), nasıl geri alırım?

Bu soru yeni başlayanların en sık sorduğu sorulardan biri olduğu için SSS olarak eklendi.

Projeye yanlışlıkla .env dosyasını ekleyip commit ettim. İçinde veritabanı şifresi var. Henüz push etmedim. Ne yapmalıyım? Ya push etmiş olsaydım?

Bu çok yaygın ve önemli bir hata. İki durum var:

Durum 1: Henüz push etmedin

git rm --cached .env                 # dosyayı depodan çıkar (diskte kalır)
echo ".env" >> .gitignore            # bir daha eklenmesin
git add .gitignore
git commit --amend --no-edit         # son commit'i düzelt

Dosya son commit’ten önceki bir commit’e girdiyse git rebase -i gerekir. O durumda daha ayrıntılı yardım isteyebilirsin.

Durum 2: Push ettiysen
:warning: Şifreyi ele geçirilmiş say ve hemen değiştir. Depo herkese açıksa botlar sızan anahtarları dakikalar içinde tarar. Geçmişten silmek bu yüzden tek başına yeterli değil.

  1. Önce şifreyi veya API anahtarını değiştir/iptal et. En önemli adım bu.
  2. Sonra geçmişten temizle: git filter-repo aracı veya BFG Repo-Cleaner ile.
  3. Temizledikten sonra git push --force gerekir; ekip arkadaşlarının depoyu yeniden klonlaması gerekir.

Önlem: Proje başında .gitignore dosyasına .env ekle. Paylaşmak için değerleri boş bırakılmış bir .env.example dosyası koy.