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.

1836voto

stdcall Points 3862

Vous ne pouvez pas fusionner avec des modifications locales. Git vous protège de la perte de modifications potentiellement importantes.

Vous avez trois options :

  • Validez la modification en utilisant

    git commit -m "My message"
  • Cachez-le.

    Le stockage agit comme une pile, où vous pouvez pousser des changements, et vous les faites sauter dans l'ordre inverse.

    Pour la mise en réserve, tapez

    git stash

    Faites la fusion, et ensuite tirez la cachette :

    git stash pop
  • Rejeter les modifications locales

    en utilisant git reset --hard
    o git checkout -t -f remote/branch

    Ou : Ignorer les changements locaux pour un fichier spécifique

    en utilisant git checkout filename

123 votes

Vous pouvez également supprimer les modifications locales pour un fichier spécifique en faisant : git checkout nom de fichier

0 votes

@Mellowcandle l'a essayé. Ne fonctionne pas pour moi. git checkout <filename> ne fonctionne pas non plus ! Confus ! Je fais un clone complet vers un autre répertoire et je mets manuellement les fichiers non indexés un par un. Cela me fait peur !

22 votes

Par défaut git stash ne cachera pas les fichiers pour lesquels il n'y a pas d'historique. Donc si vous avez des fichiers que vous n'avez pas encore ajoutés mais qui seraient écrasés ou "créés" par la fusion, la fusion sera quand même bloquée. Dans cette situation, vous pouvez utiliser git stash -u pour cacher les fichiers non engagés aussi. Ou vous pouvez simplement les supprimer !

129voto

Loganathan Points 903
git stash
git pull <remote name> <remote branch name> (or) switch branch
git stash apply --index

La première commande stocke vos changements temporairement 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 changements que vous avez stockés dans la cachette (la commande --index est utile pour s'assurer que les fichiers mis à disposition sont toujours mis à disposition).

1 votes

stackoverflow.com/questions/15286075/ peut également être utile

8 votes

Pour expliquer le point de @vikramvi : nous pouvons également utiliser git stash pop au lieu de git stash apply . Le premier le retire de la cachette alors que le second le garde toujours là.

57voto

kenorb Points 2464

Vous pouvez essayer l'une des méthodes suivantes :

rebasement

Pour les changements simples, essayez de rebaser par dessus tout en tirant les changements, par exemple.

git pull origin master -r

Ainsi, il appliquera votre branche actuelle au dessus de la branche amont après la récupération.

Ceci est équivalent à : checkout master , fetch et rebase origin/master Commandes git.

Il s'agit d'un mode de fonctionnement potentiellement dangereux. Il réécrit l'histoire, ce qui n'est pas de bon augure lorsque vous avez déjà publié cette histoire. N'utilisez pas cette option si vous n'avez pas lu git-rebase(1) soigneusement.


caisse

Si vous ne vous souciez pas de vos modifications locales, vous pouvez passer à une autre branche temporaire (avec force), et revenir en arrière, par exemple

git checkout origin/master -f
git checkout master -f

réinitialiser

Si vous ne vous souciez pas de vos modifications locales, essayez de le réinitialiser à HEAD (état original), par ex.

git reset HEAD --hard

Si ce qui précède ne vous aide pas, il peut s'agir de règles dans votre fichier de normalisation git ( .gitattributes ), il est donc préférable de s'en tenir à ce qu'il dit. Ou votre système de fichiers ne supporte pas les permissions, vous devez donc désactiver la fonction filemode dans votre configuration git.

En rapport : Comment forcer "git pull" à écraser les fichiers locaux ?

2 votes

Ça ne marche pas : Je reçois toujours le même message du type "cachez d'abord vos modifications". Quand je tape "git stash" et ensuite "git pull" -> "error : you have unsaved changes do a stash first". Peu avant de détruire mon ordinateur

0 votes

@trinity420 Pourrait-il s'agir de vos autorisations de fichiers, vérifiez git status quels sont les changements que vous avez après la mise en réserve. Si aucune réponse ne vous aide, envisagez d'ajouter une nouvelle question.

0 votes

Merci mais mon problème est résolu, j'ai essayé tout ce qu'il y a ici, rien n'a fonctionné, puis j'ai cliqué sur "commit changes" "merge" dans PHPStorm et ensuite j'ai décollé les changements et ça a fonctionné .

31voto

Gata Points 59

Utiliser :

git reset --hard

alors :

git pull origin master

25voto

Mr Nobody Points 81

Essayez ceci

git stash save ""

et essayer de tirer à nouveau

3 votes

Dans mon cas, je dois utiliser git stash -u tel que commenté à stackoverflow.com/questions/15745045/

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