343 votes

Modifications non gérées laissées après git reset --hard

Après git reset --hard , git status me donne des fichiers dans le Changes not staged for commit: section.

J'ai aussi essayé git reset . , git checkout -- . y git checkout-index -f -a en vain.

Alors, comment puis-je me débarrasser de ces changements non gérés ?

Cela semble toucher uniquement les fichiers de projet Visual Studio. C'est bizarre. Voir ce collage : http://pastebin.com/eFZwPn9Z . Ce qui est spécial avec ces fichiers, c'est que dans .gitattributes j'ai :

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

Aussi, autocrlf est définie comme fausse dans mon système global .gitconfig . Cela pourrait-il être pertinent ?

0 votes

Avez-vous appliqué ces commandes depuis la racine du référentiel ? Notez . correspond au répertoire courant et non au répertoire racine

1 votes

Je les ai fait à partir du dépôt Root en effet.

0 votes

Quel est votre git version ? Soit vous faites une erreur stupide, soit vous avez une ancienne version qui présente des bogues ?

400voto

GameScripting Points 2922

J'ai eu le même problème et il était lié à la .gitattributes fichier. Cependant, le type de fichier à l'origine du problème n'était pas spécifié dans le fichier .gitattributes .

J'ai pu résoudre le problème en exécutant simplement

git rm .gitattributes
git add -A
git reset --hard

0 votes

Je pense que cela pourrait être en fait un bug dans git. Quelqu'un a-t-il essayé de voir si c'est aussi présent dans git 1.8.4 ? (J'utilise git 1.8.3)

9 votes

C'est la directive * text=auto dans le fichier gitattributes. Elle modifie automatiquement les fins de fichiers, de sorte que les fichiers seront automatiquement marqués comme "modifiés" lorsque vous vérifiez l'état.

3 votes

Cela fonctionne, mais je ne comprends pas exactement pourquoi. Quelqu'un peut-il expliquer chaque commande ?

209voto

Jacek Szybisz Points 3623

RÉSOLU ! !!

J'ai résolu ce problème en suivant les étapes suivantes

1) Supprimer tous les fichiers de l'index de Git.

git rm --cached -r .

2) Réécrire l'index Git pour prendre en compte toutes les nouvelles fins de lignes.

git reset --hard

La solution faisait partie des étapes décrites sur le site git. https://help.github.com/articles/dealing-with-line-endings/

115voto

YuriAlbuquerque Points 638

Git ne réinitialise pas les fichiers qui ne sont pas dans le dépôt. Donc, vous pouvez :

$ git add .
$ git reset --hard

Cela mettra en scène tous les changements, ce qui amènera Git à prendre connaissance de ces fichiers, puis à les réinitialiser.

Si cela ne fonctionne pas, vous pouvez essayer de cacher et de déposer vos modifications :

$ git stash
$ git stash drop

4 votes

Les dossiers ont déjà été suivis. Je l'ai quand même essayé et ça ne fonctionne pas non plus. Il doit y avoir quelque chose de vraiment mauvais avec mon repo, mais je n'ai aucune idée de quoi. Pour le truc de la cachette git, voir ma réponse à Shahbaz.

0 votes

Que se passe-t-il lorsque vous faites un status git ?

1 votes

J'ai réfléchi à une solution. Faire un commit et un rebase interactif pour effacer ce commit.

99voto

vezenkov Points 46

Si vous utilisez Git pour Windows, il s'agit probablement de votre problème.

J'ai eu le même problème et Stash, hard reset, clean ou même tous ces éléments laissaient encore des changements derrière eux. Ce qui s'est avéré être le problème, c'est le mode de fichier x qui n'a pas été défini correctement par git. C'est un "problème connu" avec git pour Windows. Les modifications locales apparaissent dans gitk et git status comme ancien mode 100755 nouveau mode 100644, sans aucune différence réelle entre les fichiers.

La solution consiste à ignorer le mode de fichier :

git config core.filemode false

Plus d'informations ici

32voto

Norswap Points 1264

Ok, j'ai en quelque sorte résolu le problème.

Il semble que le .gitattributes contenant :

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

a fait en sorte que les fichiers du projet apparaissent non organisés. Je ne sais pas pourquoi, et j'espère vraiment que quelqu'un qui connaît bien git pourra nous donner une bonne explication.

Ma solution a été de supprimer ces fichiers, et d'ajouter autocrlf = false en [core] sur .git/config .

Cela ne revient pas exactement à la même chose que la configuration précédente, car elle exige que chaque dev dispose de autocrlf = false . J'aimerais trouver une meilleure solution.

EDITAR:

J'ai commenté les lignes incriminées, je les ai décommentées et ça a marché. Qu'est-ce que... Je ne sais même pas... !

1 votes

Je viens d'avoir exactement le même problème et c'est la seule solution qui a fonctionné. Dans mon cas, j'ai basculé d'une branche de fonctionnalité à mon master et j'ai tiré de nouveaux changements d'amont et cela a commencé à se produire pour 2 fichiers qui ont été modifiés. Il semble que les fichiers aient été basculés des terminaisons de ligne Unix vers Windows, ce qui peut avoir un rapport avec le problème. Je ne sais pas comment ni pourquoi.

0 votes

+1 Même problème sur Windows Git. J'ai déjà autocrlf = false . J'ai fusionné les changements du dépôt svn en amont ( git svn fetch / git merge git-svn ) et je me suis retrouvé avec un fichier marqué comme modifié. Ce qui est étrange, c'est que j'ai déjà eu ce problème auparavant et que tout ce que j'avais à faire était de vérifier une autre branche (avec l'attribut -f ), puis revenir en arrière. J'ai fait cela, et cela a fonctionné, mais lorsque j'ai basculé vers une branche de fonctionnalité, le "changement" était de retour ! Votre modification au bas de la réponse était la solution. Dans mon cas, j'ai commenté/décommenté une ligne en haut de mon fichier .gitattributes : * text=auto !eol

1 votes

Cet EDIT a également fonctionné pour moi : commentez les lignes dans .gitattributes , courir git status décommentez les lignes dans .gitattributes , courir git status à nouveau

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