Git Emergency

J'ai oublié de pull avant de push

Gravité Mineur

Ce qui vient de se passer

Des collègues ont poussé pendant que tu travaillais. Ta branche et le remote ont maintenant chacun des commits que l'autre n'a pas. Git refuse le push pour ne pas effacer leur travail : il faut d'abord intégrer leurs commits. Rien n'est perdu.

Risques potentiels

  • Le tentant git push --force supprimerait leurs commits du remote.
  • Si vous avez modifié les mêmes lignes, tu auras des conflits à résoudre.

Avant d'exécuter quoi que ce soit

  • Ne force jamais le push pour t'en sortir.
  • Commite (ou stash) ton travail en cours avant de pull.
  • 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

    Voir ce que tu as manqué

    fetch télécharge sans rien modifier. Le log liste leurs commits que tu n'as pas encore.

    Sans risque
    $ git fetch origin
    $ git log --oneline HEAD..origin/main
  2. 2

    Mettre tes commits par-dessus les leurs, puis pousser

    --rebase rejoue tes commits après les leurs : un historique propre et linéaire, sans commit de merge.

    Prudence
    $ git pull --rebase
    $ git push
  3. 3

    Des conflits pendant le rebase ?

    Corrige les fichiers, ajoute-les, continue. Perdu ? --abort remet tout comme avant le pull.

    Sans risque
    $ git status
    $ git add path/to/file
    $ git rebase --continue
    # or
    $ git rebase --abort
  4. 4

    Déjà pull et obtenu un commit « Merge branch 'main' of… » ?

    Pas encore poussé et tu préfères un historique propre : annule ce merge, puis pull avec rebase. (Garder le commit de merge est acceptable aussi : pousse simplement.)

    Destructrice
    $ git reset --hard ORIG_HEAD
    $ git pull --rebase
  5. 5

    Pour que ça n'arrive plus

    Fais du rebase le comportement par défaut de pull, et pull avant de commencer une tâche et avant de pousser.

    Sans risque
    $ git config --global pull.rebase true
    $ git config --global rebase.autoStash true

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 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👯 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