A tutti gli effetti pratici, la prima cosa di cui dovresti preoccuparti è CAMBIARE LE PASSWORD! Non è chiaro dalla tua domanda se il tuo repository git è interamente locale o se hai ancora un repository remoto altrove; se è remoto e non protetto da altri hai un problema. Se qualcuno ha clonato quel repository prima di risolvere il problema, avrà una copia delle password sul proprio computer locale e non è possibile forzarle ad aggiornare la versione "fissa" con la cronologia. L'unica cosa sicura che puoi fare è cambiare la tua password in qualcos'altro ovunque tu l'abbia utilizzata.
Detto questo, ecco come risolverlo. GitHub ha risposto esattamente a questa domanda come FAQ :
Nota per gli utenti Windows : utilizzare le virgolette doppie (") invece dei singoli in questo comando
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
Aggiornamento 2019:
Questo è il codice corrente dalle FAQ:
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
Tieni presente che una volta trasferito questo codice in un repository remoto come GitHub e altri hanno clonato quel repository remoto, ora ti trovi in una situazione in cui stai riscrivendo la cronologia. Quando altri tentano di eliminare le ultime modifiche dopo questo, riceveranno un messaggio che indica che le modifiche non possono essere applicate perché non è un avanzamento rapido.
Per risolvere questo problema, dovranno eliminare il loro repository esistente e ri-clonarlo, oppure seguire le istruzioni in "RECUPERARE DALLA REVISIONE DI UPSTREAM" nella manpage git-rebase .
Suggerimento : eseguiregit rebase --interactive
In futuro, se si commettono accidentalmente alcune modifiche con informazioni riservate ma si nota prima di passare a un repository remoto, ci sono alcune correzioni più facili. Se l'ultimo commit è quello per aggiungere le informazioni sensibili, puoi semplicemente rimuovere le informazioni sensibili, quindi eseguire:
git commit -a --amend
Ciò modificherà il commit precedente con eventuali nuove modifiche apportate, comprese le intere rimozioni di file eseguite con a git rm
. Se le modifiche sono più indietro nella cronologia ma non vengono ancora trasferite in un repository remoto, è possibile effettuare un rebase interattivo:
git rebase -i origin/master
Questo apre un editor con i commit che hai fatto dall'ultimo tuo antenato comune con il repository remoto. Cambia "scegli" in "modifica" su tutte le righe che rappresentano un commit con informazioni riservate, quindi salva ed esci. Git esaminerà le modifiche e ti lascerà in un punto in cui puoi:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Per ogni modifica con informazioni sensibili. Alla fine, tornerai al tuo ramo e puoi spingere in sicurezza le nuove modifiche.