Tüm pratik amaçlar için, endişelenmeniz gereken ilk şey ŞİFRELERİNİZİ DEĞİŞTİRMEK! Git deponuzun tamamen yerel olup olmadığı veya başka bir yerde uzak bir deponuzun olup olmadığı sorunuzdan net değil; uzak ve başkalarından korunmuyorsa bir sorun var. Bunu düzeltmeden önce birisi bu havuzu klonladıysa, yerel makinelerinde şifrelerinizin bir kopyasına sahip olacaklar ve onları geçmişten geçmiş olan "sabit" sürümünüze güncelleme yapmaya zorlamanın hiçbir yolu yoktur. Yapabileceğiniz tek güvenli şey, şifrenizi kullandığınız her yerde başka bir şeye değiştirmektir.
Yoldan çekilince, nasıl düzeltebileceğiniz aşağıda açıklanmıştır. GitHub bu soruyu SSS olarak tam olarak yanıtladı :
Windows kullanıcıları için not : bu komuttaki single'lar yerine çift tırnak (") kullanın
git filter-branch --index-filter \
'git update-index --remove PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
Güncelleme 2019:
Bu SSS'deki mevcut kod:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
--prune-empty --tag-name-filter cat -- --all
git push --force --verbose --dry-run
git push --force
Bu kodu GitHub gibi bir uzak depoya ittikten ve diğerlerinin bu uzak depoyu klonladığını, artık geçmişi yeniden yazdığınız bir durumda olduğunuzu unutmayın. Diğerleri bundan sonra son değişikliklerinizi aşağı çekmeye çalıştıklarında, değişikliklerin uygulanamayacağını belirten bir mesaj alırlar çünkü bu bir hızlı ileri değildir.
Bunu düzeltmek için, mevcut depolarını silmeleri ve yeniden klonlamaları veya git-rebase kılavuzundaki "UPSTREAM REBASE'DEN KURTARMA" bölümündeki talimatları izlemeleri gerekir .
İpucu : Yürütgit rebase --interactive
Gelecekte, hassas bilgilerle yanlışlıkla bazı değişiklikler yaparsanız, ancak uzak bir depoya göndermeden önce fark ederseniz , bazı daha kolay düzeltmeler vardır. Son bilgileri hassas bilgileri ekleyecekseniz, hassas bilgileri kaldırabilir ve ardından çalıştırabilirsiniz:
git commit -a --amend
Bu, a ile yapılan tüm dosya kaldırma işlemleri de dahil olmak üzere, yaptığınız tüm yeni değişikliklerle önceki taahhüdü değiştirir git rm
. Değişiklikler geçmişte daha ilerideyse, ancak yine de uzak bir depoya aktarılmamışsa, etkileşimli bir rebase yapabilirsiniz:
git rebase -i origin/master
Bu, uzak depodaki son ortak atadan bu yana yaptığınız taahhütleri içeren bir düzenleyici açar. Hassas bilgiler içeren bir taahhüdü temsil eden herhangi bir satırda "seç" i "düzenle" olarak değiştirin ve kaydedin ve çıkın. Git değişiklikleri gözden geçirecek ve sizi aşağıdakileri yapabileceğiniz bir yerde bırakacaktır:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Hassas bilgiler içeren her değişiklik için. Sonunda, şubenize geri döneceksiniz ve yeni değişiklikleri güvenli bir şekilde zorlayabilirsiniz.