2010-12-14 7 views
11

Ho un file modificato che desidero reverificare su qualsiasi cosa si trovi nell'ultimo commit ma è "bloccato" e viene sempre contrassegnato come modificato.Impossibile reimpostare un file su un commit specifico utilizzando Git

$ git status 
# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: index.php 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

Allora provo:

$git checkout -- index.php 

Ma l'uscita del git status è ancora lo stesso. Allora provo:

$git reset --hard master 
HEAD is now at 02c9613 test commit message 

E l'output di stato git è ANCORA lo stesso.

Qualche idea su come posso eliminare le presunte modifiche a tale file?

+0

Che tipo di modifiche ci sono? – Cascabel

+2

Qual è il risultato di 'git diff'. Puzza di http://stackoverflow.com/search?q=[git]+autocrlf. – Rudi

+0

Il diff mostra principalmente le modifiche di fine riga. Si noti che non ho affatto cambiato questo file. Questo è venuto da un nuovo membro del team. Daremo un'occhiata al link di Rudi. – Julian

risposta

3

È possibile che si stia imbattendo in un provare git config --global apply.whitespace nowarn per quello.

Se ciò non funziona, direi che hai incontrato un bug. Salva il clone locale per riferimenti futuri (spero non sia troppo grande) e crea un bug report. Soprattutto i fatti che:

  • non si è modificato il file da soli
  • altri file Non mostrare più questo problema

sono segni che potrebbe non solo essere che ha commesso l'errore qui . Se si riesca a riprodurre il problema su un repository pulito, sarebbero anche informazioni interessanti.

+0

Clonato di nuovo il repo e funziona perfettamente. Non riesco a riprodurre l'errore nel nuovo repository, però. Sfortunatamente il codice qui non è open source quindi non posso davvero presentarlo in un bug report :( – Julian

3

Devi rimuovere index.php dall'indice. Quindi puoi effettuare il checkout di una versione diversa.

git rm --cached index.php 

Dovrebbe fare il trucco. Vedi:

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

+1

L'output 'git status' di Julian non mostra nulla come aggiunto all'indice. – jamessan

+0

Mike, quando eseguo il comando git rm, git vuole che io esegua il commit delle modifiche che sembrano strane dato che non voglio avere nulla a che fare con questo file; Voglio solo che sia esattamente come mostrato in github. – Julian

1

Hai provato:

$ git checkout master -f -- index.php 

o

$ git checkout master -f 

?

Non riesco a capire perché funzionerebbe se non lo fosse lo reset, ma vale la pena provarlo.

+0

Gauthier, il primo comando che hai menzionato non ha avuto alcun effetto. Ma il secondo ha fatto qualcosa di molto interessante. Sebbene all'inizio non abbia fatto nulla, ho deciso di modificare qualche altro file e lo stato git lo ha contrassegnato come modificato. Dopo aver eseguito il tuo secondo suggerimento, il mio file modificato è tornato allo stato originale mentre index.php è rimasto come modificato! Sono molto vicino a clonare nuovamente il repository dall'origine. – Julian

+0

Suggerirei di eseguire 'git diff' come suggerito sopra. – Gauthier

+1

"git checkout master -f" mi ha aiutato! grazie –

0

FWIW, sono stato in grado di risolvere il problema rimuovendo le sottodirectory .git all'interno delle directory che venivano mostrate modificate. Una volta terminate le sottodirectory .git (poiché le sottodirectory erano progetti .git in sé e per sé), le cartelle principali non venivano più visualizzate. Se i file in questione si trovano nella stessa cartella di una cartella .git non correlata, ciò potrebbe anche avere un effetto.

1

provare git ls-files -m | xargs -i git update-index --assume-unchanged "{}"

+0

Basta fare attenzione, dovrai rimuovere quel flag per vedere di nuovo le modifiche usando '--no-assume-invariato ' – d4Rk

0

sono rimasto bloccato nel grazioso stesso disordine. Ho avuto alcuni file di cui non sono riuscito a liberarmi nel git status. Dopo aver provato a ripristinare o eseguire il checkout dei file in qualsiasi modo, ho deciso di aggiungere effettivamente i file problematici e di impegnarli. Git sembrava felice con questo. Poi sono tornato al commit precedente e il problema è stato risolto, i file problematici erano effettivamente scomparsi.

Non spiega il bug, ma se questa soluzione può risolverlo è già una buona cosa.