Modifiche non messe in scena rimaste dopo il reset di git --hard


275

Dopo git reset --hard, git statusmi dà i file all'interno della Changes not staged for commit:sezione.

Ho anche provato git reset ., git checkout -- .e git checkout-index -f -a, inutilmente.

Quindi, come posso liberarmi di quei cambiamenti non messi in scena?

Questo sembra colpire solo i file di progetto di Visual Studio. Strano. Vedi questa pasta: http://pastebin.com/eFZwPn9Z . La particolarità di questi file è che in .gitattributes ho:

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

Inoltre, autocrlfè impostato su false nel mio globale .gitconfig. Potrebbe essere in qualche modo rilevante?


Hai applicato quei comandi dalla radice del repository? L'avviso .indica la directory corrente non la directory principale
Alexander

1
Li ho fatti davvero dal repository di root.
Norswap,

Qual è la tua gitversione? O stai commettendo un errore sciocco o hai una vecchia versione che è buggy?
Shahbaz,

È git 1.7.4 msysgit. Potrebbe essere un errore, ma i comandi sembrano abbastanza semplici e non sono riuscito a individuare un errore.
Norswap,

Per la cronaca, ho provato a utilizzare l'ultima versione di msysgit (1.7.11), ma il problema persiste.
Norswap,

Risposte:


361

Ho avuto lo stesso problema ed era correlato al .gitattributesfile. Tuttavia, il tipo di file che ha causato il problema non è stato specificato in .gitattributes.

Sono stato in grado di risolvere il problema semplicemente eseguendo

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

7
È la direttiva * text = auto nel file gitattributes. Cambia automaticamente le terminazioni dei file, quindi i file verranno automaticamente contrassegnati come "modificati" quando si controlla lo stato.
Cody Django,

3
Funziona, ma non capisco esattamente perché. Qualcuno ha cura di spiegare ogni comando?
Edwin Stoteler,

18
@NLwino, git rm .gitattributesrimuove .gitattributes dall'indice. git add -Aaggiunge tutto (inclusa la rimozione di .gitattributes) all'indice, che dovrebbe quindi essere solo la rimozione di .gitattributes, se questo fosse davvero il problema. git reset --hardripristina tutte le modifiche non impegnate, tra cui la rimozione di .gitattributes. In sostanza, questo ignora .gitattributes (e la * text=autodirettiva) per un commit eliminandolo, quindi ripristinando l'indice mentre viene eliminato, quindi ripristinandolo, ma dopo aver già ripristinato gli altri file, quindi non sono stati modificati di nuovo.
Cloudworks,

4
@GameScripting, questa soluzione non funziona per me. Non esiste un file del tipo .gitattributes: "fatal: pathspec '.gitattributes' non corrisponde ad alcun file"
Pacerier,

4
Lo faccio e dice fatal: pathspec '.gitattributes' did not match any files . Che cosa sto facendo di sbagliato?
Miele
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.