Comment forcer git pull à écraser les fichiers locaux ?
Comment forcer git pull à écraser les fichiers locaux ?
Lorsque tu travailles avec Git, il arrive parfois que tes fichiers locaux divergent du dépôt distant.
Tu veux alors remettre ton répertoire exactement comme sur le dépôt distant, en écrasant toutes tes modifications locales.
Un simple git pull ne suffit pas, car Git protège tes changements.
👉 Cet article t’explique comment forcer git pull à écraser les fichiers locaux sans détruire le dépôt.
⚠️ Avertissement important
Avant toute chose : ces commandes vont écraser tes modifications locales.
Si tu veux les conserver, fais une sauvegarde ou crée une branche temporaire avant de continuer :
git checkout -b sauvegarde-locale
1. Le problème : conflit entre le local et le distant
Lorsque tu exécutes :
git pull
Git tente de fusionner les changements du dépôt distant avec ton travail local. Mais si tu as modifié les mêmes fichiers, Git affiche un message du genre :
error: Your local changes to the following files would be overwritten by merge:
C’est là qu’il faut agir prudemment.
2. La solution simple : réinitialiser ton dépôt local
Si tu veux tout écraser et repartir proprement, la méthode la plus fiable est d’utiliser :
git fetch --all
git reset --hard origin/<nom_de_branche>
Exemple :
Si tu es sur la branche main :
git fetch --all
git reset --hard origin/main
🧠 Explication :
git fetch --allrécupère toutes les dernières modifications depuis le dépôt distant.git reset --hard origin/mainremplace ton état local par celui du dépôt distant. Les fichiers locaux sont réécrits, les commits non poussés sont perdus.
3. Alternative : forcer un git pull avec --rebase et --autostash
Si tu veux essayer d’intégrer tes modifications tout en tirant la dernière version du dépôt distant, tu peux utiliser :
git pull --rebase --autostash
Ce que ça fait :
--autostashmet temporairement de côté tes changements locaux.--rebaserejoue tes commits locaux au-dessus de la dernière version distante.
👉 Cela ne force pas vraiment un écrasement, mais c’est utile quand tu veux éviter les conflits sans tout perdre.
4. Le vrai “force pull” : fusion écrasante
Si tu veux imiter un git pull qui écrase tout, tu peux combiner les commandes suivantes :
git fetch origin
git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)
git clean -fd
Détails :
git fetch origin: récupère les dernières modifications sans fusionner.git reset --hard origin/...: synchronise complètement ta branche locale avec la distante.git clean -fd: supprime les fichiers non suivis (-f) et les dossiers (-d).
🎯 Résultat : ton dossier local correspond exactement à la version distante.
5. Cas particulier : réinitialiser un seul fichier
Si tu veux seulement écraser un fichier spécifique, pas tout le projet :
git checkout origin/main -- chemin/vers/fichier
Cela récupère le fichier depuis le dépôt distant et remplace ta version locale.
6. Astuce bonus : script rapide “reset total”
Si tu fais souvent ce genre d’opération (par exemple sur un environnement de test ou de déploiement), crée un alias dans ton .gitconfig :
[alias]
hardpull = !git fetch --all && git reset --hard origin/$(git rev-parse --abbrev-ref HEAD) && git clean -fd
Ensuite, exécute simplement :
git hardpull
💡 Cet alias te fait gagner du temps et garantit que ton dépôt local reste propre et à jour.
🧩 En résumé
| Situation | Commande recommandée | Effet |
|---|---|---|
| Écraser tout le dépôt local | git fetch --all && git reset --hard origin/main |
Supprime toutes les modifications locales |
| Écraser un seul fichier | git checkout origin/main -- chemin/fichier |
Restaure le fichier depuis le dépôt distant |
| Conserver les changements locaux si possible | git pull --rebase --autostash |
Garde et rejoue les commits locaux |
| Nettoyer fichiers/dossiers non suivis | git clean -fd |
Supprime les fichiers inutiles |
✅ Conclusion
Il n’existe pas de commande directe git pull --force, car Git protège volontairement ton travail local.
Mais en combinant fetch, reset --hard et clean, tu obtiens un effet équivalent — un dépôt parfaitement synchronisé avec le distant.
🧠 Conseil : réserve ces commandes à des environnements où aucune donnée locale importante ne risque d’être perdue.