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

Comment ignorer le message d'erreur suivant sur git pull?

Vos modifications locales aux fichiers suivants seraient écrasées par merge

Et si je veux que les écrase?

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.

385
demandé sur Peter Mortensen 2013-01-14 16:14:43

25 réponses

Si vous voulez supprimer toutes les modifications locales de votre copie de travail, il suffit de les stocker:

git stash save --keep-index

Si vous n'en avez plus besoin, vous pouvez maintenant laisser tomber cette cachette:

git stash drop

Si vous voulez écraser uniquement des parties spécifiques de vos modifications locales, il y a deux possibilités:

  1. Commit 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 remplacer. Assurez-vous que le fichier n'est pas mis en scène par git reset HEAD path/to/file/to/revert.
312
répondu Daniel Hilgarth 2013-01-14 13:58:23

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

git checkout HEAD^ file/to/overwrite
git pull
238
répondu mae 2013-01-14 14:04:31

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

git reset --hard
git pull
125
répondu kravits88 2015-10-02 08:46:57

Voici une solution qui jette les changements par étapes:

git reset file/to/overwrite
git checkout file/to/overwrite
66
répondu Aftershock 2017-09-27 11:45:23

Vous pouvez soit valider vos modifications avant de faire la fusion, soit les stocker:

  1. git stash save
  2. git merge origin/master
  3. git stash pop
47
répondu Suneel Kumar 2018-06-22 08:12:09

Ma solution pour résoudre ce problème était:

git checkout -- <file>

Ensuite, je pourrais écraser le fichier en utilisant simplement:

git pull
30
répondu pabloasc 2015-08-04 12:38:39

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
répondu Nikhil K R 2018-04-22 11:09:44

Dans le Git récent, vous pouvez ajouter -r/--rebase on pull commande pour rebaser votre branche actuelle au-dessus de la branche amont après la récupération. L'avertissement devrait disparaître, mais il y a un risque que vous obteniez des conflits que vous devrez résoudre.


Vous pouvez également extraire une branche différente 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 à ranger (git stash) et problèmes d'autorisation potentiels, réinitialisation de fichiers (git reset HEAD --hard), Suppression de fichiers (git clean -fd), etc. Aussi ce qui précède, il est plus facile de se souvenir.

8
répondu kenorb 2016-07-28 00:11:23

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 des modifications dans le référentiel Git, donc avant de tirer / pousser, vous aurez besoin de stocker les modifications locales:

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

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

Pour remplacer toutes les modifications locales (modifications dans tous les fichiers):

git stash
git pull
git stash pop

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

7
répondu BSB 2018-04-27 12:48:51

Parfois, aucun de ces travaux. Fâcheusement, en raison de la chose LF que je pense, ce qui fonctionnera est supprimant les fichiers, puis tirant. 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 peuvent même ne pas être des modifications) seront remplacées et vous permettront de continuer.

Utilisez à vos risques et périls.

6
répondu Jeremy Holovacs 2015-08-20 18:37:29

Vous pouvez l'utiliser pour écraser le fichier

git checkout file_to_overwrite
4
répondu Deepika Patel 2015-06-27 10:06:42

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

Vous pouvez essayer de stocker sélectivement les modifications que vous souhaitez abandonner en utilisant git stash --patch, puis de supprimer cette réserve avec git stash drop. Vous pouvez ensuite extraire les modifications à distance et les fusionner comme d'habitude.

3
répondu Will Vousden 2013-01-14 12:21:46

La meilleure façon de résoudre ce problème est:

git checkout -- <path/file_name>

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

git pull origin master
3
répondu A H M Forhadul Islam 2017-04-12 09:19:18

J'ai eu un cas particulier de ceci: j'avais un fichier avec --assume-unchanged dessus. C'était difficile à localiser, car la commande git status ne montrait aucun changement

2
répondu Arkadiy 2016-06-23 20:36:03

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

git reset --hard
git pull origin master
2
répondu Gajen Sunthara 2018-04-22 11:12:28

Si vous souhaitez conserver les modifications de production sur le serveur, fusionnez 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.

2
répondu YanQing 2018-04-22 11:21:31

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

La commande ci-dessous a fonctionné comme prévu.

git reset --hard
git pull

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

2
répondu Khemraj 2018-05-20 07:03:22

J'étais ignorant un fichier dans mon repo et quand j'ai fait git pull upstream master j'ai obtenu l'erreur suivante:

Erreur: vos modifications locales aux fichiers suivants seraient écrasées par merge: myfile.js Veuillez valider vos modifications ou les stocker avant de pouvoir fusionner. Abandon

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 branch master votre branche est derrière 'origin / master' par 4 commits, et peut être l'avance rapide. (utilisez "git pull" pour mettre à jour votre local branche)

Modifications non mises en scène pour commit: (utilisez " git add ..." mettre ce qui sera commis) (utilisez "git checkout -- ..." jeter changements dans le répertoire de travail)

Modifié: monfichier.js

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

Puis j'ai fait git checkout myfile.js suivi de git pull upstream master. Cette fois, l'opération git pull a été couronnée de succès.

1
répondu Dmitry 2017-03-14 14:43:59

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

Énoncé 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é:

Erreur: vos modifications locales aux fichiers suivants seraient écrasées par fusion: veuillez valider vos modifications ou les stocker avant de pouvoir fusionner.

, Nous avons essayé d'exécuter commit, puis pull, mais ils n'ont pas de travail non plus.

Solution

Nous étaient dans l'étape dirty en fait, parce que les fichiers étaient dans la "zone de transit "alias" zone D'Index "et certains étaient dans la" zone de tête "alias" répertoire Git local". Et nous voulions tirer les changements du serveur.

Vérifiez ce lien pour des informations sur les différentes étapes de Git de manière claire: étapes GIT

, Nous avons suivi les étapes suivantes

  • git stash (cela a rendu notre répertoire de travail propre. Vos modifications sont stockées sur le 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' (engagé les modifications)
  • git push origin master (Poussé les modifications sur le serveur)
  • git stash drop (déposez la pile)

Comprenons quand et pourquoi vous avez besoin de ranger

Si vous êtes dans l'état dirty, cela signifie que vous apportez des modifications à vos fichiers et que vous êtes obligé, pour une raison quelconque, de pull ou switch branche à l'autre, et pour des travaux urgents, de sorte à ce stade, vous ne pouvez pas tirer ou de switch jusqu'à ce que vous livrez votre changement. La commande stash est ici comme un coup de main.

Extrait du livre ProGIT , 2e édition:

Souvent, lorsque vous avez travaillé sur une partie de votre projet, les choses sont en un état désordonné et vous voulez changer de branche pour un peu de travail quelque chose d'autre. Le problème est, vous ne voulez pas faire un commit de travail à moitié fait juste pour que vous puissiez revenir à ce point plus tard. Le la réponse à ce problème est la commande git stash. Cachant prend la état sale de votre répertoire de travail - c'est-à-dire votre suivi modifié fichiers et changements mis en scène - et l'enregistre sur une pile de inachevée modifications que vous pouvez réappliquer à tout moment.

1
répondu STK 2018-04-22 11:16:16

J'ai rencontré ceci 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é une validation D'Annulation sur ma solution.
  2. Ensuite, j'ai fait le processus git pull.

J'espère que cela aide!

1
répondu AJ Macapaz 2018-04-30 13:39:15

Si cette erreur est due à des fins de ligne,

git add
git checkout mybranch

Fonctionnera. Je ne sais pas vraiment pourquoi cela fonctionne.

0
répondu user60561 2017-05-08 14:38:40

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

0
répondu Munichong 2018-01-23 21:53:02

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.

Ensuite, 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
répondu c33s 2018-05-16 21:30:30

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

0
répondu Ta Quang Tu 2018-05-21 06:02:51

git reset --hard && git clean -df

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

0
répondu Yamen Ashraf 2018-06-13 09:49:05