// Git Emergency
Qu'est-ce que t'as cassé ?
Choisis ta catastrophe. On t'explique ce qui s'est passé, la gravité, et comment t'en sortir — l'option la plus sûre en premier.
Commits et travail local
Je veux annuler mon dernier commit
MineurTrop tôt, mauvais fichiers, mauvais message. Trois sorties selon ce que tu veux garder.
J'ai fait git add d'un fichier que je ne voulais pas
MineurRien n'est encore commité : retire-le de l'index, tes modifications restent.
J'ai fait une faute dans un message de commit
MineurDernier commit, commit plus ancien, déjà poussé ou pas : chaque cas a sa solution.
Mon commit fait trop de choses
MineurDécoupe-le en plusieurs commits propres avant de pousser.
J'ai commit sur la mauvaise branche
MineurClassique. Déplace les commits là où ils doivent être.
J'ai commit avec le mauvais nom ou email
MineurTon email perso sur le dépôt du boulot, ou ton email pro sur ton projet perso.
Trop de commits brouillons à nettoyer
Mineur« wip », « fix », « fix again », « ok now »… Transforme-les en un commit propre avant la PR.
J'ai exécuté un reset --hard
SérieuxDes commits ont disparu ? Le reflog les a. Des modifs non commitées ? C'est compliqué.
J'ai perdu des modifications non commit
EmbêtantUn checkout, un stash drop ou un clean -fd. On va creuser.
J'ai perdu un stash (drop, clear ou pop raté)
EmbêtantUn stash supprimé est un commit vers lequel plus rien ne pointe : on peut le retrouver pendant un moment.
J'ai supprimé un fichier et commité
MineurLe fichier a disparu de la version actuelle, mais Git se souvient de chacune de ses versions.
Branches, merges et rebases
J'ai supprimé ma branche
Embêtantgit branch -D, ou supprimée sur GitHub. Les commits sont sûrement encore là.
Je suis en « detached HEAD »
MineurTu as fait un checkout d'un commit ou d'un tag, pas d'une branche. Tes nouveaux commits flottent dans le vide.
Je suis bloqué dans un conflit de merge
MineurDes <<<<<<< partout et aucune idée de quoi garder. Respire, ça se règle.
J'ai fait un mauvais merge
EmbêtantMauvaise branche, conflits mal résolus, ou un merge qui a tout cassé.
Des lignes de code en double après un merge
EmbêtantUne fonction, un import ou tout un bloc apparaît deux fois après avoir fusionné une branche ou résolu un conflit.
Mon rebase a mal tourné
EmbêtantDes commits ont disparu, se sont dupliqués, ou l'historique est en vrac après un rebase.
J'ai fait un rebase sur la mauvaise branche
EmbêtantTa branche contient maintenant les commits d'une autre feature, ou part de develop au lieu de main.
Je veux récupérer des changements que j'ai revert
MineurTu as revert un merge, corrigé le bug, et maintenant re-merger la branche n'apporte rien.
git stash pop m'a donné un conflit
MineurLe stash ne s'est pas appliqué proprement. Bonne nouvelle : il est toujours là.
J'ai cherry-pické le mauvais commit
MineurEn cours : abandonne. Terminé : reset si pas poussé, revert si poussé.
Push et remote
J'ai push directement sur main
SérieuxPas de PR, pas de review, direct sur main. Annule sans réécrire l'historique partagé.
J'ai oublié de pull avant de push
MineurPush refusé, un vilain commit « Merge branch 'main' of… », ou des heures de travail sur une version pas à jour.
Mon push est refusé (non-fast-forward)
Mineur« Updates were rejected because the remote contains work that you do not have locally. »
J'ai fait un --amend sur un commit déjà poussé
EmbêtantMaintenant git push est refusé et Git dit que ta branche a divergé.
J'ai poussé sur la mauvaise branche
EmbêtantTes commits ont atterri sur la branche d'un collègue, ou sur une branche avec une faute dans le nom.
J'ai écrasé les commits d'un collègue
CritiqueUn git push --force a effacé le travail de quelqu'un d'autre sur le remote.
GitHub refuse un fichier de plus de 100 Mo
Embêtant« remote: error: File is 245 MB; this exceeds GitHub's file size limit. »
J'ai fait un pull et mon code a disparu
SérieuxPresque toujours récupérable : Git refuse d'écraser du travail non commité, et le reflog se souvient du reste.
J'ai supprimé une branche sur GitHub / GitLab
EmbêtantSi quelqu'un l'a encore en local, repousse-la. GitHub propose aussi un bouton « Restore branch » sur la pull request.
J'ai poussé avec le mauvais compte GitHub
MineurDeux comptes (perso / pro) sur une machine : sépare-les par dossier ou par clé SSH.
Le dépôt a été renommé ou déplacé
MineurFais pointer ton remote vers la nouvelle adresse. Rien d'autre ne change.
J'ai mis un tag sur le mauvais commit
EmbêtantDéplace le tag en local ; s'il a été poussé (et peut-être publié), réfléchis avant de le déplacer.
Pull requests
Ma pull request a des conflits
Embêtant« This branch has conflicts that must be resolved » : récupère main dans ta branche et règle-les en local.
Ma pull request est en retard sur main
Mineur« This branch is out-of-date with the base branch » : mets-la à jour, la CI retourne sur le vrai résultat.
Je dois appliquer les changements demandés en review
MineurCommite sur la même branche et pousse : la PR se met à jour toute seule. Range les commits avant le merge si ton équipe le veut.
Les checks de ma PR échouent
MineurLis les logs du job en échec, reproduis en local, pousse une correction. Ne merge pas en rouge.
Ma PR montre des commits qui ne sont pas à moi
EmbêtantTa branche est partie du mauvais endroit (une autre branche de feature, un vieux main). Déplace seulement tes commits.
J'ai ouvert ma PR vers la mauvaise branche
MineurChange la base de la PR (bouton Edit à côté du titre). Pas besoin de la fermer.
Ma PR est trop grosse pour être relue
MineurDécoupe-la en plusieurs petites PR, chacune relisible seule (PR empilées).
Mon fork est en retard sur le dépôt d'origine
MineurAjoute l'original comme upstream, mets à jour ton main, puis rebase ta branche de PR.
J'ai fermé ma PR (ou supprimé sa branche) par erreur
MineurUne PR fermée se rouvre ; une branche supprimée se restaure depuis la page de la PR.
Une PR mergée a cassé main
SérieuxAnnule la PR (GitHub a un bouton Revert), déploie, puis corrige au calme dans une nouvelle PR.
Fichiers et dépôt
J'ai commité un fichier qui devrait être ignoré
Mineurnode_modules, dist, .DS_Store, des logs… L'ajouter au .gitignore après coup ne change rien.
Git dit que tous les fichiers sont modifiés, mais je n'ai rien changé
MineurFins de ligne (CRLF / LF) ou permissions de fichiers. Pas de vrais changements.
J'ai commité node_modules (ou un dossier de build)
EmbêtantRetire-le de Git (pas du disque), ignore-le, commit. Nettoie l'historique seulement s'il est énorme.
J'ai fait git init dans le mauvais dossier
EmbêtantSupprime le dossier .git qui vient d'être créé (et seulement lui). Tes fichiers ne bougent pas.
Git ne voit pas mon renommage (majuscules / minuscules)
MineurHeader.tsx → header.tsx marche en local mais casse le build sous Linux / en CI.
J'ai lancé git clean -fd par erreur
SérieuxDes nouveaux fichiers jamais commités ont disparu.
Mon dépôt est corrompu
Sérieux« object file is empty », « bad object », « loose object is corrupt » après un plantage ou un disque plein.
Sécurité
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.