Back

Git Force Pull : Comment écraser en toute sécurité les modifications locales et se synchroniser avec le dépôt distant

Git Force Pull : Comment écraser en toute sécurité les modifications locales et se synchroniser avec le dépôt distant

Avez-vous déjà rencontré l’erreur ""Vos modifications locales seraient écrasées par le merge"" en essayant de faire un git pull ? De nombreux développeurs ont du mal à forcer git pull à écraser les fichiers locaux et à se synchroniser avec le dépôt distant. Cet article explique la bonne façon de forcer un pull dans Git sans perdre votre travail ni compromettre votre dépôt.

Points clés

  • Utilisez git fetch + git reset --hard pour écraser les modifications locales, pas git pull --force
  • git branch <backup-name> peut être utilisé pour sauvegarder les modifications locales avant de réinitialiser
  • git stash est pratique pour mettre temporairement de côté les modifications mais peut entraîner des conflits de fusion
  • git clean supprime les fichiers non suivis - à utiliser avec précaution !

Qu’est-ce que Git Force Pull ?

git pull --force est une idée fausse courante. De nombreux développeurs pensent que cette commande va écraser leurs modifications locales avec la version distante. Cependant, git pull --force fait en réalité quelque chose de différent - elle vous permet de tirer d’une branche distante avec un historique divergent en écrasant votre historique local. Elle n’écrase pas les modifications locales non validées.

Comment écraser correctement les modifications locales

Pour vraiment écraser toutes les modifications locales et rendre votre branche identique à la version distante, vous devez utiliser git fetch et git reset --hard :

git fetch origin
git reset --hard origin/main

Voici ce que font ces commandes :

  1. git fetch origin télécharge les dernières modifications du dépôt distant mais ne les fusionne pas.
  2. git reset --hard origin/main déplace la pointe de votre branche locale pour qu’elle corresponde à la branche main distante, en supprimant toutes les modifications locales.

:warning: Attention : git reset --hard supprimera définitivement toutes les modifications locales non validées. Assurez-vous de vraiment vouloir supprimer votre travail local avant d’exécuter cette commande !

Sauvegarde des modifications locales

Si vous n’êtes pas sûr d’avoir besoin de vos modifications locales ou non, vous pouvez créer une branche de sauvegarde avant de réinitialiser :

git branch backup-main
git fetch origin
git reset --hard origin/main

Maintenant, vos modifications locales sont préservées dans la branche backup-main, tandis que votre branche main est synchronisée avec la branche distante.

Remisage des modifications

Une autre façon de mettre temporairement de côté les modifications locales est d’utiliser git stash :

git stash push
git fetch origin
git reset --hard origin/main
git stash pop

Cela sauvegarde vos modifications locales, réinitialise votre branche, puis réapplique les modifications par-dessus. Notez que vous devrez peut-être résoudre des conflits de fusion après le stash pop.

Suppression des fichiers non suivis

Par défaut, git reset ne touche pas aux fichiers qui ne sont pas suivis par Git (les fichiers que vous n’avez jamais indexés avec git add). Pour effacer ces fichiers également, utilisez git clean :

git fetch origin
git reset --hard origin/main
git clean -fd

:warning: Attention : Comme git reset --hard, git clean est irréversible, alors soyez prudent !

Conclusion

Bien que git pull --force puisse sembler être la bonne commande, il est préférable d’utiliser git fetch et git reset --hard pour écraser les modifications locales et se synchroniser avec le dépôt distant. Soyez juste prudent, car reset --hard et clean -fd sont irréversibles ! En cas de doute, sauvegardez votre travail local avec git branch ou git stash avant de réinitialiser. Bon force-pulling !

FAQ

`git reset --hard` supprimera toutes les validations locales qui n'ont pas été poussées. Vous pouvez utiliser `git branch` pour les sauvegarder d'abord.

Des conflits de fusion peuvent se produire lors de la réapplication des modifications remisées par-dessus de nouveaux commits. Vous devrez résoudre les conflits manuellement, puis faire `git add` et `git commit` pour terminer l'application du remisage.

Vous pouvez généralement récupérer d'un `git reset --hard` accidentel en utilisant `git reflog` pour trouver le commit sur lequel vous étiez avant la réinitialisation, puis `git reset --hard <commit>` vers ce hash de commit.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers