J'ai oublié de pull avant de push
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
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
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
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
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
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