web-dev-qa-db-fra.com

git checkout - <fichiers> ne pas ignorer les modifications?

J'essaie de supprimer des modifications dans mon répertoire de travail (rétablir la version indexée actuelle des fichiers). Cependant, git checkout -- <file> n'annulera pas les modifications. J'ai essayé de supprimer manuellement les fichiers (rm -r files), puis d'exécuter git checkout -- ., qui affiche les fichiers modifiés à nouveau.

$ git checkout -- .
$ git status
# On branch master
# 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)
#
#   modified:   files/Hulk.png
#   modified:   files/Hulk_2.png
#
no changes added to commit (use "git add" and/or "git commit -a")

Lancer git diff montre que les fichiers sont modifiés ...

diff --git a/files/Hulk.png b/files/Hulk.png
index 1c256cb..1d37fe0 100644
Binary files a/files/Hulk.png and b/files/Hulk.png differ
diff --git a/files/Hulk_2.png b/files/Hulk_2.png
index 1c256cb..0717199 100644
Binary files a/files/Hulk_2.png and b/files/Hulk_2.png differ

REMARQUE: Certaines personnes ont dit d’exécuter git checkout .. Toutefois, le résultat obtenu est identique à celui de git checkout -- .. Le -- est simplement une notation utilisée dans la commande git checkout pour différencier les points treeish/commit des fichiers/chemins.

OS: OSX 10.6 Git: 1.7.10.2

21
Highway of Life

La cause en était due à plusieurs fichiers portant le même nom mais des cas différents. Dans OSX, qui ne fait pas la distinction entre les majuscules et les minuscules, n'aime pas les fichiers multiples portant le même nom mais différents cas. Il les considère comme le même fichier. Pour résoudre ce problème, j’ai exécuté git mv (ou tout simplement mv) dans un nom de fichier temporaire, ajouté les fichiers temporaires, ce qui a permis à git de supprimer les anciennes versions mal nommées, puis une seconde engagez-les à les nommer. Cela pourrait également être corrigé sur un système de fichiers permettant à différents fichiers portant le même nom de constituer des cas différents.

22
Highway of Life

As-tu essayé

git config --global core.autocrlf false

ou

git config --global core.filemode false
8
vinboxx

En fonction de vos commentaires, vous devez configurer votre référentiel pour qu'il soit sensible à la casse: 

git config core.ignorecase false

Cela permet à git de suivre les deux fichiers (bien que le système de fichiers n'en affiche qu'un, ce qui est extrêmement déroutant). Voici les étapes de la réplication pour démontrer ce qui se passe lorsque git suit correctement la sensibilité à la casse:

git init /tmp/test && cd /tmp/test
git config core.ignorecase false
echo test>test && git add test && git commit -m "lowercase t"
mv test Test

Maintenant, git status ne montre plus aucune différence avec test:

git status -s
 ?? Test

Valide Test et utilise git ls-files pour voir ce que nous suivons maintenant:

git add Test && git commit -m "uppercase T"
git ls-files
 Test
 test

Que rapporte ls? Pourquoi, juste 'Test', naturellement:

ls
 Test

Enfin, que se passe-t-il lorsque nous modifions Test?

echo garbage>Test
git status -s
 M Test
 M test

Quel bordel.

5
Christopher

Utilisation . au lieu de --

git checkout .
2
bluesman

Pour une raison quelconque, la même chose m’est arrivée, mais ce n’était pas un problème de sensibilité à la casse. La suppression du fichier, puis le changement de branche ont résolu le problème.

1
Igor

Ce qui a aidé dans mon cas: (améliorer également la réponse de vinboxx)

J'avais configuré .gitattributes de la manière suivante:

* text eol=crlf

(Je voulais que -X renormalise utilise automatiquement le format approprié après la fusion)

Après avoir commenté temporairement cette ligne avec la définition de git config core.autocrlf false. Tout est rentré dans l'ordre.

0
mpasko256

J'ai rencontré le même problème. J'ai trouvé que les deux fichiers problématiques avaient des caractères de fin de ligne DOS. Je l'ai fait pour résoudre le problème.

1- Utilisez un clone différent pour changer la ligne se terminant par UNIX 2- Détruisez le clone où le problème se présentait et clonez-le à nouveau.

0
Badal

Si vous souhaitez ignorer toutes les modifications que vous avez apportées, utilisez simplement

git checkout .
0
jugglinghobo

Pour éviter ce problème la prochaine fois, j'ai décidé de convertir mon système de fichiers en respectant la casse.

J'ai été agréablement surpris par la facilité avec Mac OS (10.13.4).

Il est possible de créer rapidement un nouveau volume de disque avec un système de fichiers différent:

  • lancer l'utilitaire de disque
  • cliquer sur le conteneur
  • cliquer sur Volume (+)

J'ai nommé le nouveau volume "Projects" et défini Format sur APFS (sensible à la casse).

Après cela, j'ai déplacé tous les projets dans le nouveau volume.

0
Jan Swiatecki