web-dev-qa-db-fra.com

Comment puis-je ignorer une erreur sur 'git pull' à propos de mes modifications locales seraient écrasées par la fusion?

Comment ignorer le message d'erreur suivant sur Git Pull?

Vos modifications locales dans les fichiers suivants seraient écrasées par fusion

Que faire si je veux les écraser?

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

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

445
mae

Très bien, avec l'aide des deux autres réponses, j'ai trouvé une solution directe:

git checkout HEAD^ file/to/overwrite
git pull
262
mae

Si vous souhaitez supprimer toutes les modifications locales de votre copie de travail, stockez-les simplement:

git stash save --keep-index

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

git stash drop

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

  1. Commettez 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 transféré via git reset HEAD path/to/file/to/revert.

340
Daniel Hilgarth

Cela fonctionne pour moi pour remplacer tous les changements locaux et ne nécessite pas d'identité:

git reset --hard
git pull
149
kravits88

Voici une solution qui élimine les changements mis en scène:

git reset file/to/overwrite
git checkout file/to/overwrite
72
Aftershock

Vous pouvez valider vos modifications avant de procéder à la fusion ou les stocker:

  1. git stash save
  2. git merge Origin/master
  3. git stash pop
55
Suneel Kumar

Si vous souhaitez supprimer vos modifications locales sur un fichier, vous pouvez procéder comme suit:

git checkout -- <file>

Ensuite, vous pouvez écraser le fichier [s] avec la dernière version en faisant simplement:

git pull
33
pabloasc

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
11
Nikhil K R

Dans le récent Git, vous pouvez ajouter -r/--rebase sur la commande pull pour redéfinir votre branche actuelle au-dessus de la branche en amont après l'extraction. L'avertissement devrait disparaître, mais vous risquez d'avoir des conflits que vous devrez résoudre.


Sinon, vous pouvez commander différentes branches avec force, puis revenir à master, par exemple:

git checkout Origin/master -f
git checkout master -f

Puis tirez à nouveau comme d'habitude:

git pull Origin master

L'utilisation de cette méthode peut vous faire gagner du temps en stockant (git stash) et des problèmes d'autorisations potentiels, en remplaçant des fichiers (git reset HEAD --hard), en supprimant des fichiers (git clean -fd), etc.

8
kenorb

Ce problème est dû au fait que vous avez apporté des modifications localement au fichier/s et que le même fichier/s existe avec les modifications dans le référentiel Git. Par conséquent, avant d'extraire/de pousser, vous aurez besoin de modifications locales cachées:

Pour écraser les modifications locales d'un seul fichier:

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

Pour écraser toutes les modifications locales (modifications dans tous les fichiers):

git stash
git pull
git stash pop

Ce problème peut également être dû au fait que vous êtes sur une branche qui n'est pas fusionnée avec la branche principale.

7
BSB

Parfois, aucun de ceux-ci ne fonctionne. Ennuyeux, à cause de la chose LF que je pense, ce qui fonctionnera sera supprimer les fichiers, puis tirer. Ce n’est pas que je recommande cette solution, mais si le fichier n’existe pas, git ne vous informera pas inutilement que vos modifications (qui ne sont même pas forcément des modifications) seront annulées et vous permettront de continuer.

À utiliser à vos risques et périls.

7
Jeremy Holovacs

Vous pouvez utiliser ceci pour écraser le fichier

git checkout file_to_overwrite
4
Deepika Patel

git stash save --keep-index n'a pas fonctionné pour moi.

sous la commande a fonctionné comme prévu. 

git reset --hard
git pull

Il annule tous les changements locaux si vous n'en avez pas besoin.

4
Khemraj

Cela a fonctionné pour moi pour ignorer les modifications sur le serveur distant en direct et extraire du contrôle de code source GitHub:

git reset --hard
git pull Origin master
3
Gajen Sunthara

Le meilleur moyen de résoudre ce problème est:

git checkout -- <path/file_name>

Après cela, vous pouvez écraser le fichier en:

git pull Origin master
3

Si vous souhaitez écraser des modifications spécifiques, vous avez besoin d'un moyen de lui indiquer celles que vous souhaitez oublier.

Vous pouvez essayer de stocker de manière sélective les modifications que vous souhaitez abandonner à l'aide de git stash --patch, puis de supprimer ce stockage avec git stash drop. Vous pouvez ensuite extraire les modifications à distance et les fusionner normalement.

3
Will Vousden

git reset --hard && git clean -df

Cela réinitialisera et supprimera tous les fichiers non suivis.

3
Yamen Ashraf

Si vous souhaitez conserver les modifications de production sur le serveur, fusionnez-les simplement dans un nouvel élément de configuration. La méthode de traitement est la suivante:

git stash
git pull
git stash pop

Peut-être que vous n'exécutez pas toutes les opérations. Vous pouvez savoir ce que vous pouvez faire ensuite.

2
YanQing

Voici ma stratégie pour résoudre le problème.

Déclaration du problème

Nous devons apporter des modifications dans plus de 10 fichiers. Nous avons essayé PULL (git pull Origin master), mais Git a crié:

error: Vos modifications locales dans les fichiers suivants seraient écrasées par fusion: S'il vous plaît, validez vos modifications ou stockez-les avant de pouvoir fusionner.

Nous avons essayé d'exécuter commit et ensuite pull, mais cela n'a pas fonctionné non plus.

Solution

Nous étions en fait au stade sale, car les fichiers se trouvaient dans la "Zone de stockage intermédiaire" a.k.a "Zone d'indexage" et certains se trouvaient dans la "Zone de tête" a.k.a "répertoire Git local". Et nous voulions extraire les modifications du serveur.

Vérifiez ce lien pour des informations claires sur les différentes étapes de Git: GIT Stages

Nous avons suivi les étapes suivantes

  • git stash (notre répertoire de travail a été nettoyé. Vos modifications sont stockées dans la pile par Git).
  • git pull Origin master (extraire les modifications du serveur)
  • git stash apply (Appliqué toutes les modifications de la pile)
  • git commit -m 'message' (Validé les modifications)
  • git Push Origin master (Transmis les modifications au serveur)
  • git stash drop (Déposer la pile)

Comprenons quand et pourquoi vous avez besoin de cacher

Si vous êtes dans l'état sale, cela signifie que vous apportez des modifications à vos fichiers, puis vous êtes obligé, pour quelque raison que ce soit, à tirer ou basculer à une autre branche pour un travail très urgent, vous ne pouvez donc pas tirer ou changer de main-d’œuvre tant que vous n’avez pas validé votre changement. La commande stash est ici comme un coup de main.

Extrait du livre ProGIT, 2e édition:

Souvent, lorsque vous travaillez sur une partie de votre projet, il y a de la place. un état désordonné et que vous voulez changer de branche pour travailler un peu autre chose. Le problème est que vous ne voulez pas faire un commit de travail à moitié fait pour que vous puissiez revenir sur ce point plus tard. Le La réponse à ce problème est la commande git stash. Stashing prend le État sale de votre répertoire de travail - c’est-à-dire que votre suivi suivi est modifié les fichiers et les modifications planifiées - et l’enregistre sur une pile de données non finies changements que vous pouvez réappliquer à tout moment.

2
STK

J'avais un cas particulier de ceci: j'avais un fichier avec --assume-inchanged dessus Il était difficile à localiser car la commande git status n’affichait aucun changement. 

2
Arkadiy

J'ai rencontré cela en tirant du maître.

La façon dont je l'ai géré, en utilisant Visual Studio;

  1. Tout d'abord, j'ai effectué l'annulation de la validation de ma solution.
  2. Ensuite, j'ai fait le processus Git Pull.

J'espère que cela t'aides!

1
AJ Macapaz

J'ignorais un fichier dans mon dépôt et quand j'ai fait git pull upstream master j'ai eu l'erreur suivante:

erreur: vos modifications locales dans les fichiers suivants seraient écrasées par la fusion: monfichier.js S'il vous plaît, validez vos modifications ou stockez-les avant de pouvoir les fusionner . Avorter

Pour le résoudre j'ai fait ce qui suit

git update-index --no-assume-unchanged myfile.js

J'ai ensuite fait git status et j'ai reçu ce message

Sur branche master Votre branche est derrière 'Origin/master' de 4 commits, et peut être expédié rapidement. (utilisez "git pull" pour mettre à jour votre branche locale )

Modifications non planifiées pour la validation: (utilisez "git add ..." pour mettre à jour Ce qui sera validé) (utilisez "git checkout - ..." pour ignorer Les modifications du répertoire de travail)

modifié: myfile.js

aucune modification n'a été ajoutée à commit (utilisez "git add" et/ou "git commit -a")

Ensuite, j'ai fait git checkout myfile.js suivi de git pull upstream master. Cette fois, l'opération Git Pull a été réussie.

1
Dmitry

J'ai le même message d'erreur exécuté le
: PluginUpdatecommande à partir de la ligne de commande de vim editors

"Merci de valider vos modifications ou de les stocker avant de les fusionner"

1. vient de retirer physiquement le dossier contenant les plugins du

rm -rf ~/.vim/bundle/plugin-folder/

2. et l'a réinstallé à partir de la ligne de commande vim,
: PluginInstall!
car mon ~/.vimrc contenait les instructions pour construire le plugin vers cette destination:

 enter image description here

cela a créé le dossier approprié,
et le nouveau paquet est dans ce dossier ~ ./. vim/bundle /dossier-plugins réinstallé
Les signes "! " (en raison de l'échec de la commande PluginUpdate commande) ont été modifiés
aux signes " + ", et ensuite, la commandePluginUpdateest exécutée.

0
stefansson

Pour Pycharm, vous pouvez faire Git -> Revert puis tirer.

0
Munichong

J'ai essayé et avec succès, avant de tirer, laissez valider tous les fichiers que vous n'avez pas engagés, alors vous ne recevrez pas ces messages d'AS. 

0
Ta Quang Tu

Ce message peut également se produire si git-lfs est utilisé et qu'un pointeur de fichier a été écrasé par un fichier réel.

alors vous utilisez:

git stash
git lfs migrate import
git pull

sortie complète de mon cas

λ git stash
Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master'
Encountered 1 file(s) that should have been pointers, but weren't:
        public/Apple-touch-icon.png

λ git pull
Updating 5a4ad44..b25f79d
error: Your local changes to the following files would be overwritten by merge:
        public/Apple-touch-icon.png
Please commit your changes or stash them before you merge.
Aborting

λ git lfs migrate import
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done
migrate: checkout: ..., done


λ git pull
Updating 5d4ad47..a25c79a
Fast-forward
 public/Apple-touch-icon.png | Bin 2092 -> 130 bytes
 public/favicon.ico          | Bin 6518 -> 1150 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)

voir https://github.com/git-lfs/git-lfs/issues/2839

0
c33s

La solution la plus simple est:

git reset --hard && git pull
0
Jackkobec

Si cette erreur est due aux fins de ligne,

git add
git checkout mybranch

marchera. Je ne sais pas vraiment pourquoi ça marche.

0
user60561