2013-07-14 13 views
7

Esecuzione di Windows 7 con Git installato da Git-1.8.3-preview20130601.exe.git checkout non ripristina il file

Ho un file modificato nella mia directory di lavoro, mi piacerebbe ripristinarlo al suo stato all'ultimo commit. Ho provato varie invocazioni di git checkout, ma il file modificato rimane nella mia directory di lavoro. Per esempio:

[C:\Work\BitBucket\proj1] 14:32:45>git status 
On branch work2 
Your branch is behind 'origin/work2' by 9 commits, and can be fast-forwarded. 
    (use "git pull" to update your local branch) 
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: pomodoro.html 
no changes added to commit (use "git add" and/or "git commit -a") 

[C:\Work\BitBucket\proj1] 14:32:53>git checkout pomodoro.html 

[C:\Work\BitBucket\proj1] 14:33:00>git status 
On branch work2 
Your branch is behind 'origin/work2' by 9 commits, and can be fast-forwarded. 
    (use "git pull" to update your local branch) 

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: pomodoro.html 
no changes added to commit (use "git add" and/or "git commit -a") 

[C:\Work\BitBucket\proj1] 14:33:04> 

(ottengo lo stesso risultato con git checkout -- pomodoro.html.)

Quindi, git pensa pomodoro.html viene modificato, ma quando uso

git difftool 

Mi hanno detto che il i file sono identici.

Non so se è rilevante, ma ho core.autocrlf impostato su true nella mia configurazione Git. Quando l'ho cambiato in false ho avuto lo stesso comportamento, però.

+0

@MarkusUnterwaditzer Ci ha provato. – millimoose

+0

'git checkout pomodoro.html' controllerà il file dall'indice, non da un commit - questo potrebbe essere il colpevole se hai già aggiunto le modifiche. Per * ripristinare * un file, proverei 'git checkout HEAD pomodoro.html'. – millimoose

+0

@millimoose: Non ho eseguito le modifiche, voglio solo annullare le modifiche non modificate. "git checkout HEAD pomodoro.html" non ha funzionato, o ... – Number8

risposta

2

si tratta di un colpo selvaggio, ma:

è questo file per qualche motivo contrassegnato come eseguibile nella repo? è improbabile per un html, ma se è stato memorizzato su es. un disco formattato grasso è pensabile. se questo è il tuo caso e il tuo git di Windows non è configurato per ignorare le autorizzazioni, il file verrà sempre modificato perché nessuna quantità di reset o di check-out ti darà il bit eseguibile su Windows.

per sbarazzarsi del set fileMode messaggio su false: https://superuser.com/a/139044/236874

+0

Io lavoro con file marcati eseguibili e stanno bene nel git di Windows. Nessun problema a causa di ciò (solo il problema è quando voglio crearne uno che sia eseguibile, non ho trovato il modo di farlo in Windows, quindi eseguo il checkout in alcuni unix, set, commit e push). –

+0

forse questo è migliorato in passato. Ho avuto problemi con questo alcuni anni fa. lascia aspettare una risposta dall'autore originale se è solo inconsapevole del reset o se c'è qualche problema reale. – mnagel

+0

Ho appena avuto quel problema con un PDF. Sembrava storto quando caricato con git, ma sembrava okay tramite FTP. Alla fine si è scoperto che non potevo liberarmene con il checkout o lo stash e questo mi ha portato qui, il che ha risolto tutto. grazie per il quale – mgPePe

4

Questo collegamento (fornito da AD7Six) - help.github.com/articles/dealing-with-line-endings - sembra essere la risposta: sistemare le terminazioni di linea.
Poiché autocrlf è stato impostato su true, non è sicuro in che modo le terminazioni di riga in quel file siano state incasinate.
Grazie per tutti gli altri commenti.

0

ho avuto problemi simili, nel mio caso su OSX ed è stato a causa di due file con lo stesso nome, ma caso diverso: https://sourcedevelop.org/blog/post/fix-git-commands-not-working-some-files

Ho passato ore a cercare di capire come risolvere il problema, seguendo le istruzioni come questi . La chiave per riconoscere il sintomo di due file con lo stesso nome è quando esegui un checkout git sui file, quindi vedi il file elencato nel tuo prossimo stato git, tuttavia il caso del file è diverso. Ho finito per rimuovere i file e quindi aggiungere uno di loro indietro.

git rm -f <filename> 
git rm -f <filename> 
git commit -m "Removing duplicate files" 
<put the file back, the version you want> 
git add . 
git commit -m "adding files back" 
Problemi correlati