J'ai fait quelques mises à jour sur ma machine locale, les ai poussées vers un référentiel distant, et maintenant j'essaie de récupérer les modifications sur le serveur et je reçois le message;
erreur: vos modifications locales dans les fichiers suivants seraient écrasées par la fusion:
wp-content / w3tc-config / master.php
Veuillez valider vos modifications ou les ranger avant de pouvoir fusionner.
Alors j'ai couru,
git checkout -- wp-content/w3tc-config/master.php
et j'ai réessayé et je reçois le même message. Je suppose que cela a w3tc
changé quelque chose dans le fichier de configuration sur le serveur. Je me fiche que la copie locale ou la copie distante passe sur le serveur (je suppose que la copie distante est la meilleure), je veux juste pouvoir fusionner le reste de mes modifications (mises à jour du plugin).
Des idées?
Réponses:
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 le changement en utilisant
Cache-le.
Stashing agit comme une pile, où vous pouvez pousser les modifications et les faire apparaître dans l'ordre inverse.
Pour ranger, tapez
Faites la fusion, puis tirez la cachette:
Ignorer 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
la source
git reset --hard
vous pouvez également supprimer les fichiers non suivis avecgit clean -dfx
git stash
, ne stockera 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 toujours bloquée. Dans cette situation, vous pouvez également utilisergit stash -u
pour stocker des fichiers non validés. Ou vous pouvez simplement les supprimer!git clean -dfx
était une idée terrible. Suppression de certains fichiers .gitignored dont j'avais réellement besoin.git reset --hard
, avait encore des modifications non fusionnées!La première commande stocke temporairement vos modifications dans la cachette 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 cachette (l'
--index
option est utile pour vous assurer que les fichiers intermédiaires sont toujours intermédiaires).la source
git stash pop
place degit stash apply
. Le premier le retire de la cachette tandis que le dernier le garde toujours làVous pouvez essayer l'une des méthodes suivantes:
rebaser
Pour des modifications simples, essayez de rebaser dessus tout en tirant les modifications, par exemple
Il appliquera donc votre branche actuelle au-dessus de la branche en amont après la récupération.
Cela équivaut à:
checkout master
,fetch
et lesrebase origin/master
commandes git.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éactiver, par exemple
réinitialiser
Si vous ne vous souciez pas de vos modifications locales, essayez de le réinitialiser à HEAD (état d'origine), par exemple
Si ci-dessus n'aide pas, il peut s'agir de règles dans votre fichier de normalisation git (
.gitattributes
), il est donc préférable de valider ce qu'il dit. Ou votre système de fichiers ne prend pas en charge les autorisations, vous devez donc désactiverfilemode
dans votre configuration git.En relation: Comment forcer "git pull" pour écraser les fichiers locaux?
la source
git status
les modifications que vous avez apportées après le stockage. Si aucune réponse ne vous aide, envisagez d'ajouter une nouvelle question.Essaye ça
et essayez de tirer à nouveau
la source
git stash -u
, comme commenté à stackoverflow.com/questions/15745045/…La situation que j'ai rencontrée était donc la suivante:
sauf, juste avant cela, était distant: donc en fait ceci:
Ce qui se passait était (je pense, pas 100% positif) que le crochet de réception de git post commençait à fonctionner et à se visser en raison de changements de mouvement dans le référentiel du serveur distant, qui en théorie, n'aurait pas dû être touché.
Donc, ce que j'ai fini par faire en traçant le hook post-réception et en trouvant cela, c'était d'aller dans le référentiel distant sur le serveur, et il y a eu le changement (qui n'était pas sur mon référentiel local, qui, en fait, dit qu'il correspondait, aucun changement, rien à valider, à jour, etc.) Donc, pendant le 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 local et distant correspondaient réellement et je pouvais continuer à travailler et à déployer. Je ne sais pas exactement comment cette situation s'est produite, bien qu'une douzaine de développeurs et des changements informatiques puissent y être pour quelque chose.la source
AVERTISSEMENT: cela supprimera les fichiers non suivis, donc ce n'est pas une excellente 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 plus âgé:
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 requis pour le forcer à s'exécuter.
la source
Pour garder une trace de vos fichiers nouvellement créés tout en résolvant ce problème:
Si vous avez des fichiers nouvellement créés , vous pouvez créer un correctif de modifications locales, extraire les fusions distantes et appliquer votre correctif local une fois la fusion distante terminée, comme défini étape par étape ci-dessous:
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 qui ne sont pas fusionnées.
Comme suggéré par Anu, si vous rencontrez des problèmes pour appliquer le patch, essayez:
git apply --reject --whitespace=fix mypatch.patch
Cette réponse git: patch n'applique pas les discussions en détail sur ce problèmeProfitez de votre travail continu sur votre fonctionnalité et validez vos modifications locales une fois terminé.
la source
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 changements !git apply --reject --whitespace=fix mypatch.patch
, j'ai récupéré mes changements ouf !!! [Merci à] ( stackoverflow.com/a/15375869/6484358 )Demander un commit avant de tirer
Si besoin :
la source
Pour moi seulement
git reset --hard
fonctionnait que.S'engager n'était pas une option, car il n'y avait rien à engager.
Le stockage n'était pas une option car il n'y avait rien à cacher.
On dirait qu'il aurait pu provenir de fichiers exclus
.git/info/exclude
et avoirgit update-index --assume-unchanged <file>
édité certains fichiers.la source
Dans mon cas, j'ai sauvegardé puis supprimé le fichier dont Git se plaignait, commis, puis j'ai finalement pu consulter une autre branche.
J'ai ensuite remplacé le fichier, recopié dans le contenu et continué comme si de rien n'était.
la source
Cela est probablement dû à des problèmes CRLF.
Voir: Pourquoi devrais-je utiliser core.autocrlf = true dans Git?
Utilisez ceci pour extraire et forcer la mise à jour:
la source
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 cacher '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 ça a marché. j'espère que cette réponse vous aidera. :)
la source
Si vous utilisez Git Extensions, 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
, accédez à l' onglet Diff , cliquez avec le bouton droit sur les lignes avec une icône de crayon (ou+
ou-
), choisissez Réinitialiser pour valider d'abord ou valider ou ranger ou tout ce que vous voulez faire avec.la source
Pour moi, cela a fonctionné:
git reset --hard
et alors
git pull origin <*current branch>
après ça
git checkout <*branch>
la source
Probablement
aiderait
la source