Questo tipo di problema è spesso causato dal tentativo di eseguire il pull da un repository che ha due nomi di file che differiscono solo nel caso. Se sei su FAT, NTFS in modalità senza distinzione tra maiuscole e minuscole (essenzialmente, ogni volta che viene utilizzato in Windows), o HFS + in modalità senza distinzione tra maiuscole e minuscole, e hai due file "foobar" e "FOOBAR", Git ne vedrà due distinti file, ma il filesystem ne vedrà solo uno, il che causerà tutti i tipi di problemi. Git effettuerà il checkout, ad esempio "FOOBAR", e quindi il checkout "foobar", che il filesystem vede semplicemente sostituire il contenuto di "FOOBAR" ma lasciandolo al suo posto. Ora a Git, sembra che "FOOBAR" sia stato sostituito con il contenuto di "foobar", e "foobar" non c'è più.
Ci sono due diverse manifestazioni di questo problema di base. Uno è quando il tuo repository contiene effettivamente due file che differiscono solo sul caso. In questo caso, è necessario lavorare su un file system che fa distinzione tra maiuscole e minuscole o sarà necessario modificare il repository per assicurarsi che non si verifichino collisioni di questo tipo; un file system senza distinzione tra maiuscole e minuscole semplicemente non può memorizzare il contenuto di questo repository.
Un caso diverso che puoi risolvere è quando si verifica una ridenominazione che cambia il caso del file. Supponiamo, ad esempio, che il repository Git contenga una ridenominazione da "EXAMPLE" a "example". Prima che Git controlli la nuova versione, proverà a verificare che non stia sovrascrivendo alcuni file esistenti che hai sul tuo disco. Poiché pensa che "esempio" sia un nuovo nome di file, chiederà al filesystem se esiste, e il filesystem vedrà "ESEMPIO" e dirà di sì, quindi Git rifiuterà di controllare la nuova versione poiché pensa che sovrascriverà file non tracciati. In questo caso, se non hai modifiche locali che ti interessano, un semplice filegit reset --hard <revision-to-checkout>
sarà generalmente sufficiente per superare il problema e passare alla nuova revisione. Cerca solo di ricordarti di non rinominare i file con altri nomi che differiscono solo nel caso in cui ti trovi su un file system senza distinzione tra maiuscole e minuscole, poiché causerà problemi come questo.