web-dev-qa-db-fra.com

git dit que j'ai des modifications non mises en scène mais je ne les montre pas

J'exécute cette commande sur le deuxième fichier que je veux supprimer (le premier était les fichiers de dossiers .idea de JetBrains qui sont maintenant dans .gitignore), mais je ne suis pas en mesure de:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch gf5/console/basic.php' --Prune-empty --tag-name-filter cat -- --all
Cannot rewrite branches: You have unstaged changes.

Alors, comment puis-je savoir à quels fichiers "non mis en scène" git fait référence quand il ne les répertorie pas, et comment puis-je résoudre ce problème?

PS la question n'est pas cachée (es), je n'en ai pas et n'ai jamais fait de cachette sur ce repo.

NOTE: J'ai fait un git status et je reçois ceci:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   gf5/console/basic.php

Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)

//(and a whole long list of files)
7
Oliver Williams

AHA !! J'ai compris ce qui se passe. Lisez les dernières phrases pour un petit aperçu.

La réponse était d'abord faire:

git status

Cela montrait les fichiers modifiés en ROUGE, ce qui, je suppose, signifie qu’ils sont en quelque sorte "supprimés" dans l’esprit de git. J'ai ensuite fait:

git add --all

À partir de là, j'ai validé tous les fichiers mis en scène à l'aide de SourceTree (désolé, je ne suis pas resté en ligne de commande jusqu'au bout). Je suis allé de l'avant et en même temps j'ai transmis les modifications au serveur, mais ce serait une option. 

La commande ci-dessus a ensuite fonctionné avec succès.

Lorsque j'ai essayé d'exécuter la commande ci-dessus sur un fichier différent, j'ai eu le même problème. J'ai donc à nouveau lancé git status et il s'avère que le fichier que je viens de supprimer de l'historique est toujourset vous devez donc procéder comme suit:

git rm /previous_file_you_just_removed_from_history.php

Également pour clarifier, la commande filter-branch supprimera l'historique de ce fichier de tous les commits, mais elle NE supprimera PAS les modifications que vous avez apportées à ce fichier. C'est à dire. ce fichier supprimé est toujours la somme de toutes les modifications que vous y avez apportées jusqu'à ce point. J'espère que cela aide à clarifier ce concept pour quelqu'un d'autre.

8
Oliver Williams

Le même problème se posait. Tous mes fichiers étaient modifiés après un clone récent et la cause (dans mon cas) était que Tortoise Git modifiait automatiquement les fins de ligne de chaque fichier lors de la validation et de la validation. 

Pour éviter ce problème, désactivez le paramètre AutoCrLf dans la fenêtre des paramètres du référentiel (Git -> Config Source [Local] -> AutoCrlf) comme décrit dans cette question.

0
ArkTekniK