J'ai effectué des mises à jour sur ma machine locale, je les ai placées dans un référentiel distant, et maintenant j'essaie d'extraire les modifications sur le serveur et je reçois le message.
erreur: vos modifications locales sur les fichiers suivants seraient écrasées par la fusion:
wp-content/w3tc-config/master.php
S'il vous plaît, validez vos modifications ou stockez-les avant de pouvoir les fusionner.
Alors j'ai couru,
git checkout -- wp-content/w3tc-config/master.php
et essayé à nouveau et je reçois le même message. Je suppose que w3tc
a modifié quelque chose dans le fichier de configuration sur le serveur. Peu m'importe que la copie locale ou la copie distante soit placée sur le serveur (je suppose que la meilleure est celle qui est distante), je veux simplement pouvoir fusionner le reste de mes modifications (mises à jour de plugins).
Des idées?
Vous ne pouvez pas fusionner avec des modifications locales. Git vous protège de la perte de changements potentiellement importants.
Vous avez trois options:
git commit -m "My message"
Stashing agit comme une pile, dans laquelle vous pouvez appliquer des modifications et les afficher dans l'ordre inverse.
Pour cacher, tapez
git stash
Faites la fusion, puis tirez la cachette:
git stash pop
en utilisant git reset --hard
ou git checkout -t -f remote/branch
en utilisant git checkout filename
git stash
git pull <remote name> <remote branch name> (or) switch branch
git stash apply --index
La première commande stocke temporairement vos modifications dans la réserve et les supprime du répertoire de travail.
La deuxième commande change de branche.
La troisième commande restaure les modifications que vous avez stockées dans la stash (l'option --index
est utile pour vous assurer que les fichiers stockés le sont toujours).
Vous pouvez essayer l'une des méthodes suivantes:
Pour des modifications simples, essayez de changer de base tout en extrayant les modifications, par ex.
git pull Origin master -r
Donc, il va appliquer votre branche actuelle sur la branche en amont après la récupération.
Ceci équivaut à: checkout master
, fetch
et rebase Origin/master
git.
C'est un mode de fonctionnement potentiellement dangereux. Il réécrit l’histoire, ce qui augure mal lorsque vous avez déjà publié cette histoire. N'utilisez cette option que si vous avez lu
git-rebase(1)
avec précaution.
Si vous ne vous souciez pas de vos modifications locales, vous pouvez basculer vers une autre branche temporaire (avec force) et la rétablir, par exemple.
git checkout Origin/master -f
git checkout master -f
Si vous ne vous souciez pas de vos modifications locales, essayez de le réinitialiser sur HEAD (état d'origine), par exemple.
git reset HEAD --hard
Si ci-dessus ne vous aide pas, il se peut que des règles se trouvent dans votre fichier de normalisation git (.gitattributes
), il est donc préférable de valider ce qu'il dit. Ou bien votre système de fichiers ne prend pas en charge les autorisations. Vous devez donc désactiver filemode
dans votre configuration git.
Connexes: Comment puis-je forcer "git pull" pour écraser les fichiers locaux?
Donc, la situation que j'ai rencontrée était la suivante:
erreur: vos modifications locales dans les fichiers suivants seraient écrasées par la fusion: wp-content/w3tc-config/master.php S'il vous plaît, validez vos modifications ou stockez-les avant de pouvoir les fusionner.
sauf que, juste avant cela, était distant: donc en fait ceci:
remote: error: Vos modifications locales dans les fichiers suivants seraient écrasées par la fusion: un peu/fichier.ext S'il vous plaît, validez vos modifications ou stockez-les avant de pouvoir les fusionner.
Ce qui se passait était (je pense, pas à 100% positif) que le crochet de réception de messages post-génériques commençait à fonctionner et à se gâcher en raison de changements de mouvements dans le référentiel du serveur distant, ce qui en théorie n’aurait pas dû être touché.
Donc, ce que j’ai fait en traçant à travers le hook post-réception et en trouvant cela, c’était de me rendre dans le référentiel distant sur le serveur, et il y a eu la modification (qui n’était pas dans mon référentiel local, ce qui, en fait, dit qu’il correspondait, aucun changement, rien à commettre, à jour, etc.) Ainsi, alors qu’au niveau local, il n’y avait aucun changement, sur le serveur, j’ai ensuite fait un git checkout -- some/file.ext
, puis les référentiels locaux et distants correspondaient et j'ai pourrait continuer à travailler et déployer. Je ne sais pas trop comment cette situation s'est produite, bien qu'une douzaine de développeurs et des modifications informatiques puissent y être pour quelque chose.
Essaye ça
git stash save ""
et essayez de tirer à nouveau
Dans mon cas, je ne voulais pas conserver les fichiers, donc cela a fonctionné pour moi:
Git 2.11 et plus récent:
git clean -d -fx .
Vieux Git:
git clean -d -fx ""
Référence:http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x signifie que les fichiers ignorés sont également supprimés, ainsi que les fichiers inconnus de git.
-d signifie supprimer les répertoires non suivis en plus des fichiers non suivis.
-f est nécessaire pour le forcer à courir.
J'ai essayé la première réponse: git stash
avec le score le plus élevé, mais le message d'erreur est toujours apparu, puis j'ai trouvé cet article pour valider les modifications au lieu de stash 'Reluctant Commit'
et le message d'erreur a finalement disparu:
1: git add .
2: git commit -m "this is an additional commit"
3: git checkout the-other-file-name
alors cela a fonctionné. espérons que cette réponse aide. :)
Cela est probablement dû à des problèmes de CRLF.
Voir: Pourquoi devrais-je utiliser core.autocrlf = true dans Git?
Utilisez ceci pour tirer et forcer la mise à jour:
git pull Origin master
git checkout Origin/master -f
Dans mon cas, j'ai sauvegardé puis supprimé le fichier dont Git se plaignait, validé, puis j'ai finalement pu vérifier une autre branche.
J'ai ensuite remplacé le fichier, recopié dans le contenu et continué comme si de rien n'était.
Si vous utilisez les extensions Git , vous devriez pouvoir trouver vos modifications locales dans le Working directory
comme indiqué ci-dessous:
Si vous ne voyez aucun changement, c'est probablement parce que vous êtes sur un mauvais sous-module. Vérifiez donc tous les articles avec une icône de sous-marin comme indiqué ci-dessous:
Lorsque vous avez trouvé un changement non engagé:
Sélectionnez la ligne avec Working directory
, naviguez vers onglet Diff , faites un clic droit sur les lignes avec un crayon (ou une icône +
ou -
), choisissez Réinitialiser au premier commit ou commit ou stash ou ce que vous voulez faire avec.
Pour moi, seul git reset --hard
fonctionnait.
S'engager n'était pas une option, car il n'y avait rien à commettre.
Stashing n'était pas une option car il n'y avait rien à cacher.
On dirait que cela pourrait provenir de fichiers exclus dans .git/info/exclude
et avoir git update-index --assume-unchanged <file>
'édité certains fichiers.
Pour moi, cette méthode fonctionne mieux, au lieu de cacher. Je souhaite apporter les dernières modifications, conserver une copie de mes modifications locales et les appliquer par la suite.
git add .
git diff --cached > mypatch.patch
git reset --hard
git pull
git apply mypatch.patch
Git fusionnera les modifications et créera des fichiers .rej pour les modifications non fusionnées.
Et profitez de votre travail continu sur votre fonctionnalité, et validez les modifications locales lorsque vous avez terminé.