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.
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:
- Commit tout ce que vous ne voulez pas écraser et utilisez la méthode ci-dessus pour le reste.
- 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 pargit reset HEAD path/to/file/to/revert
.
D'accord avec l'aide des deux autres réponses, j'ai trouvé une solution directe:
git checkout HEAD^ file/to/overwrite
git pull
Cela fonctionne pour moi pour remplacer tous les changements locaux et ne nécessite pas d'identité:
git reset --hard
git pull
Voici une solution qui jette les changements par étapes:
git reset file/to/overwrite
git checkout file/to/overwrite
Vous pouvez soit valider vos modifications avant de faire la fusion, soit les stocker:
git stash save
git merge origin/master
git stash pop
Ma solution pour résoudre ce problème était:
git checkout -- <file>
Ensuite, je pourrais écraser le fichier en utilisant simplement:
git pull
Si votre référentiel contient quelques fichiers qui sont supprimés de master
:
git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
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.
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.
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.
Vous pouvez l'utiliser pour écraser le fichier
git checkout file_to_overwrite
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.
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
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
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
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.
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.
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.
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.
J'ai rencontré ceci en tirant du maître.
La façon dont je l'ai géré, en utilisant Visual Studio;
- Tout d'abord, j'ai effectué une validation D'Annulation sur ma solution.
- Ensuite, j'ai fait le processus git pull.
J'espère que cela aide!
Si cette erreur est due à des fins de ligne,
git add
git checkout mybranch
Fonctionnera. Je ne sais pas vraiment pourquoi cela fonctionne.
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(-)
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.
git reset --hard && git clean -df
Cela réinitialisera et supprimera tous les fichiers non suivis.