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.

6voto

Sanaullah Ahmad Points 71

Rejeter les modifications locales en utilisant git reset --hard

1 votes

Que faire si je dois également pousser mes modifications locales ?

5voto

Rahul Mankar Points 379

Demander un commit avant un pull

  • git stash
  • git pull origin << branchname >>

Si nécessaire :

  • git stash apply

1 votes

Utilisez git stash lorsque vous voulez enregistrer l'état actuel du répertoire de travail et de l'index, mais que vous voulez revenir à un répertoire de travail propre. La commande enregistre vos modifications locales et rétablit le répertoire de travail en fonction du commit HEAD.

5voto

LeoTM Points 1

Pour moi, seulement git reset --hard travaillé.

S'engager n'était pas une option, car il n'y avait rien à engager.

La mise en réserve n'était pas une option parce qu'il n'y avait rien à mettre en réserve.

On dirait que cela pourrait provenir de fichiers exclus dans .git/info/exclude et ayant git update-index --assume-unchanged <file> J'ai édité quelques fichiers.

0 votes

Cela annulerait-il vos précédentes git update-index --assume-unchanged <file> demande ?

0 votes

Git reset --hard supprimera les modifications existantes qui n'ont pas encore été commitées.

1voto

Jan Points 31

Avant d'utiliser la réinitialisation, pensez à utiliser le retour en arrière afin de pouvoir toujours revenir en arrière.

https://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert

Sur demande

Source : https://www.pixelstech.net/article/1549115148-git-reset-vs-git-revert

git reset vs git revert   sonic0002 2019-02-02 08:26:39 

Lorsque l'on maintient du code à l'aide de systèmes de contrôle de version tels que git, il est inévitable que l'on doive revenir en arrière sur certains commits erronés, soit à cause de bogues, soit à cause d'un changement de code temporaire. Dans ce cas, les développeurs débutants sont très nerveux parce qu'ils ne savent plus ce qu'ils doivent faire pour annuler leurs changements sans affecter les autres, mais pour les développeurs expérimentés, c'est leur travail de routine et ils peuvent vous montrer différentes façons de le faire. Dans cet article, nous allons présenter deux méthodes principales fréquemment utilisées par les développeurs.

  • git reset
  • git revert

Quelles sont leurs différences et les cas d'utilisation correspondants ? Nous allons les examiner en détail ci-dessous. git reset Supposons que nous ayons quelques commits ci-dessous. enter image description here

Les commit A et B sont des commits qui fonctionnent, mais les commit C et D sont des mauvais commits. Maintenant nous voulons revenir au commit B et abandonner les commit C et D. Actuellement HEAD pointe sur le commit D 5lk4er, nous devons juste pointer HEAD sur le commit B a0fvf8 pour obtenir ce que nous voulons.  Il est facile d'utiliser la commande git reset.

git reset --hard a0fvf8

Après avoir exécuté la commande ci-dessus, le HEAD pointera vers le commit B. enter image description here

Mais maintenant l'origine distante a toujours HEAD point à commettre D, si nous utilisons directement git push pour pousser les changements, il ne mettra pas à jour le repo distant, nous devons ajouter une balise -f pour forcer la mise en place des changements.

git push -f

L'inconvénient de cette méthode est que tous les commits après HEAD disparaîtront une fois la réinitialisation effectuée. Si un jour nous trouvons que certains des commits étaient bons et que nous voulons les garder, il est trop tard. Pour cette raison, de nombreuses entreprises interdisent l'utilisation de cette méthode pour annuler des changements.

git revert L'utilisation de git revert est de créer un nouveau commit qui renverse un commit précédent. Le HEAD pointera vers le nouveau commit d'annulation.  Pour l'exemple de git reset ci-dessus, ce que nous avons besoin de faire est juste de revenir sur le commit D et ensuite sur le commit C. 

git revert 5lk4er
git revert 76sdeb

Maintenant, il crée deux nouveaux engagements D' et C',  enter image description here

Dans l'exemple ci-dessus, nous avons seulement deux commits à inverser, donc nous pouvons inverser un par un. Mais que faire s'il y a beaucoup de commits à inverser ? Nous pouvons inverser une gamme en effet.

git revert OLDER_COMMIT^..NEWER_COMMIT

Cette méthode n'aurait pas l'inconvénient de git reset il pointerait HEAD vers le commit de retour en arrière nouvellement créé et il est possible de pousser directement les changements vers le distant sans utiliser l'attribut -f option. Examinons maintenant un exemple plus difficile. Supposons que nous avons trois commits mais que le mauvais commit est le deuxième.  enter image description here

Ce n'est pas une bonne idée d'utiliser git reset pour annuler le commit B puisque nous devons garder le commit C car c'est un bon commit. Maintenant, nous pouvons revenir sur les commit C et B et ensuite utiliser la commande cueillir des cerises pour commettre à nouveau C.  enter image description here

D'après l'explication ci-dessus, nous pouvons constater que la plus grande différence entre git reset et git revert c'est que git reset réinitialisera l'état de la branche à un état antérieur en abandonnant toutes les modifications postérieures au commit souhaité alors que git revert réinitialisera à un état antérieur en créant de nouveaux commits de retour et conservera les commits originaux. Il est recommandé d'utiliser git revert au lieu de git reset dans un environnement d'entreprise.  Référence : https://kknews.cc/news/4najez2.html

0 votes

Merci pour la réponse. Il ajoute de nouvelles informations, cependant, l'expliquer plus en détail ici dans la réponse pourrait être plus utile au cas où le lien serait rompu à l'avenir. Vous pouvez également utiliser des guillemets pour citer des extraits du site Web.

1voto

Wolf Points 37

% git status HEAD détaché à 5c Les changements ne sont pas mis à jour pour un commit : (utilisez "git add ..." pour mettre à jour ce qui sera livré) (utilisez "git restore ..." pour supprimer les changements dans le répertoire de travail)

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