Git Emergency

J'ai push directement sur main

Gravité Sérieux

Ce qui vient de se passer

Tes commits sont maintenant sur la branche main partagée. Tes collègues les ont peut-être déjà récupérés et la CI est peut-être déjà en train de les déployer.

Risques potentiels

  • Du code non testé peut être déployé en production.
  • Un force push pour les retirer casserait le dépôt de tous ceux qui ont déjà pull.

Avant d'exécuter quoi que ce soit

  • Préviens ton équipe avant de faire quoi que ce soit. Sérieusement.
  • Préfère git revert : il ajoute un commit qui annule le tien, sans réécrire l'historique.
  • 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

    Garder ton travail sur une branche

    Sauvegarde tes commits sur une branche de feature pour ouvrir une vraie PR ensuite.

    Sans risque
    $ git branch feature/my-work
  2. 2

    Identifier les commits à annuler

    Liste les derniers commits du main distant.

    Sans risque
    $ git fetch origin
    $ git log --oneline -n 10 origin/main
  3. 3

    Les annuler avec revert (recommandé)

    Crée de nouveaux commits qui annulent les tiens. L'historique reste intact et personne ne casse son dépôt.

    Prudence
    $ git switch main
    $ git revert --no-edit abc1234..def5678
    $ git push origin main
  4. 4

    Dernier recours : réécrire main

    Seulement si PERSONNE n'a encore pull et que la protection de branche le permet. --force-with-lease refuse de pousser si quelqu'un d'autre a poussé entre-temps.

    Destructrice
    $ git switch main
    $ git reset --hard origin/main~1
    $ git push --force-with-lease origin main

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 exécuté un reset --hard🧨 J'ai écrasé les commits d'un collègue🔑 J'ai envoyé mon fichier .env sur GitHub🔀 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