903 votes

Comment puis-je ignorer une erreur dans "git pull" indiquant que mes modifications locales seront écrasées par la fusion ?

Comment ignorer le message d'erreur suivant sur les pull Git ?

Vos modifications locales des fichiers suivants seraient écrasées par la fusion

Et si je veulent pour les écraser ?

J'ai essayé des choses comme git pull -f mais rien ne fonctionne.

Pour être clair, je veux seulement écraser des changements spécifiques, pas tout.

0 votes

Relié mais pas en double : stackoverflow.com/questions/52704/

12 votes

@BrianKnoblauch totalement d'accord ! De plus, ce n'est pas vraiment une 'fusion' si c'est un 'écrasement', n'est-ce pas ? SVN me manque tous les jours...

6 votes

git config core.fileMode false sauver mon temps

664voto

Daniel Hilgarth Points 90722

Si vous voulez supprimer toutes les modifications locales - y compris les fichiers qui ne sont pas suivis par git - de votre copie de travail, il suffit de les cacher :

git stash push --include-untracked

Si vous n'en avez plus besoin, vous pouvez maintenant laisser tomber cette réserve :

git stash drop

Si vous ne voulez pas cacher les changements que vous avez déjà mis en place - par exemple avec git add - puis ajoutez l'option --keep-index . Notez cependant que cela empêchera toujours la fusion si ces modifications échelonnées entrent en collision avec celles provenant de l'amont.


Si vous souhaitez écraser uniquement des parties spécifiques de vos modifications locales, il existe deux possibilités :

  1. Enregistrez tout ce que vous ne voulez pas écraser et utilisez la méthode ci-dessus pour le reste.

  2. Utilisez git checkout path/to/file/to/revert pour les modifications que vous souhaitez écraser. Assurez-vous que ce fichier n'est pas mis à disposition via git reset HEAD path/to/file/to/revert .

0 votes

La possibilité n° 2 ne fonctionne pas. Après avoir exécuté la commande, rien ne se passe. En tirant, j'obtiens toujours la même erreur.

1 votes

@user1132363 : Cela fonctionne pour moi. Veuillez le tester d'abord avec un seul fichier. Aussi, vous devez vous assurer que le fichier que vous voulez écraser n'est pas mis en scène.

4 votes

L'astuce consistait à utiliser git checkout HEAD^ path/to/file/to/revert . Utilisation de HEAD^ a fait toute la différence.

434voto

user1132363 Points 1217

D'accord, avec l'aide des deux autres réponses, j'ai trouvé une solution directe :

git checkout HEAD^ file/to/overwrite
git pull

14 votes

Cela a marché pour moi. Pourriez-vous développer cette réponse, à savoir ce que cela fait réellement ?

4 votes

Il abandonne les modifications locales et revient à la référence HEAD, qui est probablement le dernier commit de la branche master.

38 votes

pourquoi HEAD^ au lieu de HEAD ?

83voto

Sunil omrey Points 178

Vous pouvez soit livrer vos changements avant de faire la fusion, soit les cacher :

  1. git stash save
  2. git merge origin/master
  3. git stash pop

13 votes

Le fait est que vous ne devriez pas avoir à faire ça. Il suffit de prendre le matériel HEAD actuel et de le fusionner dans ..... ! C'est vraiment simple, Git, tous les autres VCS le font... mais non. Linus a dû le rendre ennuyeux à utiliser.

0 votes

@Jon Cette solution est pour Ubuntu, je n'ai rien trouvé de mieux que celle-ci.

0 votes

Malheureusement --autostash L'option est disponible uniquement avec --rebase option (

82voto

Aftershock Points 1602

Voici une solution qui permet d'éliminer les modifications échelonnées :

git reset file/to/overwrite
git checkout file/to/overwrite

12 votes

Malheureusement, si la différence perçue provient du fait que les nouvelles lignes du fichier ont été modifiées lors de l'extraction, cela ne résoudra pas le problème.

0 votes

c'est la meilleure solution, à mon avis, parce qu'elle ne perturbe pas les éléments mis en scène, mais elle résout le problème du fichier qui empêche le tirage.

1 votes

@DanielSank comment l'avez-vous résolu ?

31voto

Nikhil K R Points 72

Si votre référentiel contient quelques fichiers qui sont supprimés de master :

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch

0 votes

git reset --hard origin/master est la seule chose qui a fonctionné, parmi toutes ces solutions. Merci.

0 votes

Merci beaucoup ! J'ai essayé toutes les réponses ci-dessus mais aucune n'a fonctionné. Je n'ai rien changé et j'ai toujours cette erreur pour le fichier A, et quand j'ai essayé stash, j'ai eu cette erreur avec 10 autres fichiers. Cela se répète sans cesse... git reset --hard origin/<branch> a aidé !

0 votes

C'est le seul qui a fonctionné pour moi. Merci ! git checkout -b newbranch est hors de portée. La question était de tirer, donc ce serait git pull .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X