web-dev-qa-db-fra.com

Comment résoudre git en disant "Validez vos modifications ou stockez-les avant de pouvoir fusionner"

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?

576
Jo Sprague

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

Vous avez trois options: 

  • Valider le changement en utilisant

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

    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
    
  • Jeter les modifications locales

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

    Ou: ignorer les modifications locales pour un fichier spécifique

    en utilisant git checkout filename

1029
stdcall
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).

55
Loganathan

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

rebasement

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.


check-out

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

réinitialiser

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?

20
kenorb

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.

10
Mike

Essaye ça 

git stash save ""

et essayez de tirer à nouveau

6
Mr Nobody

AVERTISSEMENT: Ceci 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 .

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.

2
Dark Matter

Demander un engagement avant de tirer

  • git stash
  • git pull Origine << nom de branche >>

Si besoin :

  • git stash s'applique
2
Rahul Mankar

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. :)

0
hong cai

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
0
Keith Turkowski

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.

0
CodyBugstein

Si vous utilisez les extensions Git , vous devriez pouvoir trouver vos modifications locales dans le Working directory comme indiqué ci-dessous:

enter image description here

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:

enter image description here

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.

0
Bizhan

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.

0
Leo

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.

  1. Mettez en scène vos changements locaux. (ne pas valider) (la mise en attente est également nécessaire pour corriger les nouveaux fichiers non suivis)

git add .

  1. Créer un patch pour garder une trace

git diff --cached > mypatch.patch

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

git reset --hard

  1. Tirer les changements

git pull

  1. Appliquez votre patch

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é.

0
Manpreet