À toutes fins pratiques, la première chose qui devrait vous inquiéter est de CHANGER VOS MOTS DE PASSE! Il ne ressort pas clairement de votre question si votre référentiel git est entièrement local ou si vous avez un référentiel distant ailleurs encore; s'il est éloigné et n'est pas protégé des autres, vous avez un problème. Si quelqu'un a cloné ce référentiel avant de résoudre ce problème, il aura une copie de vos mots de passe sur sa machine locale, et il n'y a aucun moyen de les forcer à mettre à jour vers votre version "fixe" avec elle est passée de l'histoire. La seule chose sûre que vous pouvez faire est de changer votre mot de passe en quelque chose d'autre partout où vous l'avez utilisé.
Avec cela à l'écart, voici comment y remédier. GitHub a répondu exactement à cette question en tant que FAQ :
Remarque pour les utilisateurs de Windows : utilisez des guillemets doubles (") au lieu de simples dans cette commande
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
Mise à jour 2019:
Voici le code actuel de la 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
Gardez à l'esprit qu'une fois que vous avez poussé ce code vers un référentiel distant comme GitHub et que d'autres ont cloné ce référentiel distant, vous êtes maintenant dans une situation où vous réécrivez l'historique. Lorsque d'autres essaient de dérouler vos dernières modifications après cela, ils recevront un message indiquant que les modifications ne peuvent pas être appliquées car ce n'est pas une avance rapide.
Pour résoudre ce problème, ils devront soit supprimer leur référentiel existant et le recloner, soit suivre les instructions sous "RECOVERING FROM UPSTREAM REBASE" dans la page de manuel git-rebase .
Astuce : exécutergit rebase --interactive
À l'avenir, si vous effectuez accidentellement des modifications avec des informations sensibles mais que vous le remarquez avant de passer à un référentiel distant, il existe des correctifs plus faciles. Si votre dernier commit est celui pour ajouter les informations sensibles, vous pouvez simplement supprimer les informations sensibles, puis exécuter:
git commit -a --amend
Cela modifiera la validation précédente avec toutes les nouvelles modifications que vous avez apportées, y compris les suppressions de fichiers entières effectuées avec a git rm
. Si les modifications remontent plus loin dans l'historique mais ne sont toujours pas transmises à un référentiel distant, vous pouvez effectuer un rebasage interactif:
git rebase -i origin/master
Cela ouvre un éditeur avec les validations que vous avez faites depuis votre dernier ancêtre commun avec le référentiel distant. Remplacez «choisir» par «modifier» sur toutes les lignes représentant un commit contenant des informations sensibles, puis enregistrez et quittez. Git vous guidera à travers les changements et vous laissera à un endroit où vous pourrez:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Pour chaque changement avec des informations sensibles. Finalement, vous vous retrouverez dans votre branche et vous pourrez pousser les nouvelles modifications en toute sécurité.