1085 votes

Comment résoudre le message de git "Commit your changes or stash them before you can merge" ?

J'ai effectué quelques mises à jour sur ma machine locale, je les ai poussées vers un référentiel distant, et maintenant j'essaie de transférer les changements vers le serveur et j'obtiens le message suivant ;

error: Your local changes to the following files would be overwritten by merge:
wp-content/w3tc-config/master.php
Please, commit your changes or stash them before you can merge.

Alors j'ai couru,

git checkout -- wp-content/w3tc-config/master.php

et j'ai réessayé et j'obtiens le même message. Je suppose que w3tc a changé quelque chose dans le fichier de configuration du serveur. Je ne me soucie pas de savoir si la copie locale ou la copie distante va sur le serveur (je suppose que la copie distante est la meilleure), je veux juste pouvoir fusionner le reste de mes modifications (mises à jour de plugins).

Des idées ?

25 votes

Il s'agit d'une question plus explicite, avec plus de détails et une meilleure réponse. Je pense qu'il est utile de garder celle-ci. Oui, l'autre question a été techniquement posée en premier, mais la suppression de celle-ci rendrait plus difficile pour les gens de trouver les réponses qu'ils recherchent.

18voto

Dipanwita Mallick Points 469

Cela a résolu mon erreur :

Je suis sur la branche : "A"

git stash

Déplacement vers la branche master :

git checkout master 
git pull*

Revenir dans ma branche : "A"

git checkout A 
git stash pop*

13voto

Dark Matter Points 461

AVERTISSEMENT : Cela supprimera les fichiers non suivis, ce n'est donc pas une bonne réponse à cette question.

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 .

Plus 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 tracés en plus des fichiers non tracés.

  • -f est nécessaire pour le forcer à s'exécuter.

13voto

Manpreet Points 660

Pour garder une trace de vos fichiers nouvellement créés tout en résolvant ce problème :

Si vous avez les fichiers nouvellement créés Si vous avez besoin d'un correctif, vous pouvez créer un correctif des changements locaux, tirer des fusions à distance et appliquer votre correctif local après que la fusion à distance soit terminée, comme défini étape par étape ci-dessous :

  1. Mettez en scène vos changements locaux. (ne les livrez pas). La mise en scène est nécessaire pour créer un patch des nouveaux fichiers créés (car ils ne sont pas encore suivis).

git add .

  1. Créer un patch pour garder une trace

git diff --cached > mypatch.patch

  1. Annuler les modifications locales et supprimer les nouveaux fichiers locaux

git reset --hard

  1. Changements de tirage

git pull

  1. Appliquez votre correctif

git apply mypatch.patch

Git fusionne les changements et crée des fichiers .rej pour les changements qui ne sont pas fusionnés.

Comme suggéré par Anu, si vous avez des problèmes pour appliquer le patch, essayez :

git apply --reject --whitespace=fix mypatch.patch Cette réponse git : le patch ne s'applique pas parle en détail de cette question

Profitez de la poursuite de votre travail sur votre fonctionnalité, et livrez vos modifications locales lorsque vous avez terminé.

0 votes

Je voulais pousser une portion de code avec de nouvelles modifications, alors j'ai fait : 1. créé un patch à partir de ma branche dev locale 2. fait le hard reset 3. tiré les nouvelles modifications de master vers dev (pour éviter tout conflit de fusion) 4. fait une petite modification dans mon dev local 5. poussé vers dev distant 6. appliqué le patch en retour--> J'ai eu une erreur : error: patch failed: yourfile.py:33 error: yourfile.py: patch does not apply J'ai toujours le mypatch.patch, mais je ne sais pas pourquoi il n'est pas appliqué et j'ai perdu mes modifications !

0 votes

Je l'ai eu, la commande correcte était git apply --reject --whitespace=fix mypatch.patch J'ai récupéré mes modifications, ouf !!! [Merci à ]( stackoverflow.com/a/15375869/6484358 )

1 votes

Anu, la commande git apply mypatch.patch est correcte pour appliquer le patch, c'est ce que j'utilise tout le temps, il peut y avoir un problème avec le patch créé lui-même, et vous ne perdez jamais vos modifications si vous avez votre patch en main, il contient toutes les modifications consolidées.

13voto

Mike Points 550

La situation que j'ai rencontrée est donc la suivante :

erreur : Vos modifications locales des fichiers suivants seraient écrasées par la fusion : wp-content/w3tc-config/master.php S'il vous plaît, livrez vos changements ou cachez-les avant de fusionner.

sauf que, juste avant, il y avait la télécommande : donc en fait, ceci :

à distance : erreur : Vos modifications locales des fichiers suivants seraient écrasées par la fusion : some/file.ext S'il vous plaît, livrez vos changements ou cachez-les avant de fusionner.

Ce qui se passait, c'est que (je pense, mais je ne suis pas sûr à 100%) le hook git post receive commençait à fonctionner et se plantait à cause des changements de mouvement dans le dépôt du serveur distant, qui en théorie, n'aurait pas dû être touché.

Donc ce que j'ai fini par faire en traçant à travers le hook post-receive et en trouvant ceci, c'était d'aller sur le dépôt distant sur le serveur, et il y avait le changement (qui n'était pas sur mon dépôt local, qui, en fait, disait qu'il correspondait, pas de changement, rien à commiter, à jour, etc.) Donc pendant que sur le local, il n'y avait pas de changement, sur le serveur, j'ai alors fait un git checkout -- some/file.ext et ensuite les dépôts locaux et distants correspondaient et je pouvais continuer à travailler, et à déployer. Je ne sais pas exactement comment cette situation s'est produite, mais une vingtaine de développeurs et des changements informatiques y sont peut-être pour quelque chose.

2 votes

S'agit-il d'une question ou d'une réponse ?

2 votes

@stdcall - Un peu des deux. Lorsque j'ai rencontré la situation décrite dans la question, voici ce que j'ai dû faire pour la résoudre. Ce n'était certainement pas une résolution git normale, et d'après la question, il semble que cela pourrait être la même situation anormale (c'est-à-dire, des changements de configuration sur le serveur, mais le local n'a pas de changements). Si quelqu'un a une idée plus précise du pourquoi (ou comment) cela s'est produit, je serais heureux d'avoir un aperçu.

8voto

Yeshi Points 103

Pour moi, cela a fonctionné :

git reset --hard

et ensuite

git pull origin <*current branch>

après cela

git checkout <*branch>

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