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
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.
As-tu essayé
git config --global core.autocrlf false
ou
git config --global core.filemode false
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.
Utilisation . au lieu de --
git checkout .
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.
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.
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.
Si vous souhaitez ignorer toutes les modifications que vous avez apportées, utilisez simplement
git checkout .
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:
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.