Git Emergency

J'ai envoyé mon fichier .env sur GitHub

Gravité Critique

Ce qui vient de se passer

Tes secrets (clés d'API, mots de passe, tokens) sont dans l'historique du dépôt. Des bots scannent les dépôts publics en quelques secondes. Supprimer le fichier dans un nouveau commit ne le retire PAS de l'historique.

Risques potentiels

  • Les clés exposées peuvent être exploitées immédiatement (factures cloud, vol de données).
  • Les forks et clones gardent une copie même après le nettoyage de l'historique.

Avant d'exécuter quoi que ce soit

  • ÉTAPE ZÉRO : révoque et régénère chaque secret du fichier. Nettoyer l'historique ne suffit pas.
  • Vérifie les journaux de tes fournisseurs pour détecter un usage suspect.
  • La réécriture de l'historique nécessite un clone de sauvegarde et l'accord de l'équipe.
  • Règle d'or : avant toute commande destructrice, crée une branche de secours avec git branch backup/before-fix — ça ne coûte rien.

Étapes de récupération

  1. 1

    Arrêter de suivre le fichier

    Retire .env de l'index tout en le gardant sur ton disque, puis empêche qu'il revienne.

    Sans risque
    $ git rm --cached .env
    $ echo ".env" >> .gitignore
    $ git commit -m "chore: stop tracking .env"
  2. 2

    Faire un clone de sauvegarde

    Un clone miroir, au cas où l'étape suivante tourne mal.

    Sans risque
    $ git clone --mirror git@github.com:OWNER/REPO.git backup-repo.git
  3. 3

    Effacer le fichier de tout l'historique

    git filter-repo (à installer séparément) réécrit chaque commit et tous les hash changent. Il retire aussi le remote « origin » : rajoute-le avant de pousser (git remote add origin <url>).

    Destructrice
    $ git filter-repo --force --invert-paths --path .env
  4. 4

    Pousser l'historique nettoyé

    Tout le monde devra ensuite re-cloner. Sur GitHub, contacte aussi le support pour purger les vues en cache et les références de PR.

    Destructrice
    $ git push --force --all origin
    $ git push --force --tags origin

Ces procédures sont fournies à titre informatif. Lis chaque commande et adapte-la à ta situation avant de l'exécuter. Disclaimer

Autres catastrophes

🪓 J'ai supprimé ma branche🚨 J'ai push directement sur main💥 J'ai exécuté un reset --hard🧨 J'ai écrasé les commits d'un collègue🔀 J'ai fait un mauvais merge👻 J'ai perdu des modifications non commit🎯 J'ai commit sur la mauvaise branche🎈 Je suis en « detached HEAD »⚔️ Je suis bloqué dans un conflit de merge🚫 Mon push est refusé (non-fast-forward)🌀 Mon rebase a mal tourné🐘 GitHub refuse un fichier de plus de 100 Mo🥸 J'ai commit avec le mauvais nom ou email🗑️ J'ai supprimé un fichier et commité⏪ Je veux annuler mon dernier commit✏️ J'ai fait un --amend sur un commit déjà poussé🧹 Trop de commits brouillons à nettoyer📮 J'ai poussé sur la mauvaise branche🧭 J'ai fait un rebase sur la mauvaise branche🔁 Je veux récupérer des changements que j'ai revert📦 git stash pop m'a donné un conflit🙈 J'ai commité un fichier qui devrait être ignoré🔠 Git ne voit pas mon renommage (majuscules / minuscules)🧨 J'ai lancé git clean -fd par erreur🩻 Mon dépôt est corrompu🙃 J'ai oublié de pull avant de push👯 Des lignes de code en double après un merge➖ J'ai fait git add d'un fichier que je ne voulais pas✏️ J'ai fait une faute dans un message de commit✂️ Mon commit fait trop de choses🧺 J'ai perdu un stash (drop, clear ou pop raté)🫥 J'ai fait un pull et mon code a disparu🍒 J'ai cherry-pické le mauvais commit☁️ J'ai supprimé une branche sur GitHub / GitLab👥 J'ai poussé avec le mauvais compte GitHub🚚 Le dépôt a été renommé ou déplacé🏷️ J'ai mis un tag sur le mauvais commit🌊 Git dit que tous les fichiers sont modifiés, mais je n'ai rien changé📦 J'ai commité node_modules (ou un dossier de build)📂 J'ai fait git init dans le mauvais dossier🧨 Ma pull request a des conflits⏳ Ma pull request est en retard sur main📝 Je dois appliquer les changements demandés en review🧳 Ma PR montre des commits qui ne sont pas à moi🎯 J'ai ouvert ma PR vers la mauvaise branche🚨 Une PR mergée a cassé main🚪 J'ai fermé ma PR (ou supprimé sa branche) par erreur🔴 Les checks de ma PR échouent🐘 Ma PR est trop grosse pour être relue🍴 Mon fork est en retard sur le dépôt d'origine