2015-02-03 21 views
5

Sembra che io abbia in qualche modo ottenuto git in uno stato in cui non commetterà perché un file che è stato cancellato non esiste:git non commetterà perché un file eliminato non esiste

 
~/src$ git status -u 
# On branch master 
# Your branch is ahead of 'origin/master' by 5 commits. 
# (use "git push" to publish your local commits) 
# 
# Changes to be committed: 
# (use "git reset HEAD ..." to unstage) 
# 
# deleted: release-vars.sh 
# 
~/src$ git commit -a 
fatal: pathspec 'release-vars.sh' did not match any files 
~/src$ ls release-vars.sh 
ls: cannot access release-vars.sh: No such file or directory 

Qualche idea su come risolvere questa situazione?

+0

Forse un duplicato di questo? [Git-rm-fatale-pathspec-fatto-qualsiasi-file non-match-] (https://stackoverflow.com/questions/25458306/git-rm-fatal-pathspec-did-not-match-any-files) –

+0

Non proprio, è per un caso speciale che riguarda i file LARGE, non il banale caso di un file. – UpAndAdam

+0

Si tratta di un problema relativo alla distinzione tra maiuscole e minuscole nel file system? – Ivo

risposta

-1

Suggerirei di iniziare eseguendo manualmente le modifiche utilizzando git add FILENAME e git rm FILENAME prima di eseguire un commit senza l'opzione -a. (vai semplicemente a git commit -m "SOME MESSAGE")

git commit -a dice di mettere automaticamente in scena i file che sono stati modificati e cancellati. Quando si tenta di rimuovere un file da git che potrebbe ancora esistere localmente, ciò sarà problematico.

Essere espliciti su ciò che si sta facendo è raramente una cosa negativa e può facilmente risolvere il problema.

Se ciò non funziona; prova a fare git reset e poi prova questo fresco.

Un'altra opzione fornita da git help rm è la seguente:

Se tutto quello che vuole veramente fare è quello di rimuovere dall'indice dei file che non sono più presenti nella struttura di lavoro (forse perché il vostro lavoro albero è sporca, così che non è possibile utilizzare git commit -a), utilizzare il seguente comando:

 git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached 
+0

Grazie per il consiglio. Ma cosa faccio adesso? –

+0

@SteveEmmerson Hai provato a eseguire il commit senza l'opzione '-a'? Un semplice 'git commit'? –

+0

@SteveEmmerson cosa succede, se provi git 'rm --cached release-vars.sh' e poi' git commit -m "rimuovi release-vars.sh" ' – UpAndAdam

0

-a è exp dicendo in modo lecito di impegnare la versione corrente di ogni file attualmente tracciato dal contenuto nel worktree. Non è esattamente la stessa operazione di

git add --all 

che potrebbe essere quello che stai cercando qui. Quindi fai un commit ordinario.

Se i .gitignore specifiche lasciano detriti unignored non si vuole tenere traccia si potrebbe invece git rm --cached il file eliminato in modo esplicito in modo che le successive git commit -a non scatta sopra il file inaspettatamente mancante.

+0

'git add --all' non riesce a risolvere la situazione. –

+0

Fa l'eliminazione sul mio sistema. Cosa dice commit quando fai 'git add --all' prima di commetterlo? – jthill

Problemi correlati