2015-02-24 12 views
8

considericome risolvere i cambiamenti unstaged non mostrati da "git status"

$ git status 
On branch chore/nbsp-fix-2 
nothing to commit, working directory clean 
$ git rebase -i master 
Cannot rebase: You have unstaged changes. 
Please commit or stash them. 

Come faccio a capire che cosa i cambiamenti unstaged sono che stanno impedendo git da rebasing?

Alcuni background: qualcuno è riuscito ad aggiungere file con uno spazio di interruzione (% A0) nel nome. Questo ha causato problemi con il repository. I file appaiono come non tracciati e git pensa che il repository sia sporco - un problema simile.

La tecnica che stavo usando per correggere il problema è creare un nuovo ramo prima di quelle modifiche e selezionare i pochi commit dopo queste modifiche. Purtroppo sono ora in questa situazione. Posso immaginare che ci sia qualche altro file o altro resto di quel problema che mi impedisce di andare avanti. Ora sono in questa posizione dopo aver selezionato il commit singolo seguendo i nomi di file non validi.

Sto cercando suggerimenti per superare questo problema. Che cos'è il rebase visto che lo stato non vede?

+1

Prova 'git diff-files', cosa dice? Ecco cosa sta controllando rebase. – jthill

+0

@jthill, fornisci una risposta adeguata e ti darò credito. 'git diff-files' (e' git diff') ha fornito la risposta. –

+0

Come è successo? Sono abituato a essere un file non tracciato e ignorato che lo stato debitamente ignora ma viene rintracciato in un nuovo checkout e quindi git si rifiuta di calpestarlo, ma non è quello che è successo qui e sono curioso di sapere cosa ha fatto. – jthill

risposta

3

Risulta git rebase è uno script di shell in /usr/libexec/git-core/git-rebase, grep per "avere cambiamenti unstaged" in che dir ottiene esattamente un colpo, in git-sh-setup, in questa funzione:

require_clean_work_tree() { 
    git rev-parse --verify HEAD >/dev/null || exit 1 
    git update-index -q --ignore-submodules --refresh 
    err=0 

    if ! git diff-files --quiet --ignore-submodules 
    then 
     echo >&2 "Cannot $1: You have unstaged changes." 
     err=1 
    fi 

[ ... ] 

e rebase non richiamare quello. Quindi, per rispondere a

Che cosa viene visualizzato rebase che lo stato non vede?

la tua domanda, prova git diff-files.

+0

Grazie, è quello che stavo cercando. 'git diff' e' git diff-files' hanno mostrato che c'era un file di lunghezza 0 gestito da git-fat che stava causando il problema. C'è un bug con file filtrati di lunghezza 0. –

+0

C'è persino una patch fornita nel rapporto. Ho fatto una richiesta di pull per questo. – jthill

+0

Ecco come ho capito qual era il problema. Posso verificare che la modifica risolva anche il problema. –

Problemi correlati