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, pasgit pull --force
git branch <backup-name>
peut être utilisé pour sauvegarder les modifications locales avant de réinitialisergit stash
est pratique pour mettre temporairement de côté les modifications mais peut entraîner des conflits de fusiongit 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 :
git fetch origin
télécharge les dernières modifications du dépôt distant mais ne les fusionne pas.git reset --hard origin/main
déplace la pointe de votre branche locale pour qu’elle corresponde à la branchemain
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.