2010-12-01 18 views
366

Quando eseguo git reset --hard HEAD, è necessario reimpostare su una versione incontaminata di ciò che hai tirato, a quanto ho capito. Sfortunatamente, lascia i file in giro, mentre uno git status mostra una grande lista di file non tracciati.reset git --hard HEAD lascia file non tracciati dietro

Come si dice a git "Basta riportarlo ESATTAMENTE in quello che c'era nell'ultimo tiro, niente di più, niente di meno"?

+27

'ripristino git --hard' reimposta l'indice e ritorna i file monitorati torna allo stato in quanto sono nella testa. Lascia solo i file non tracciati. – fifigyuri

+0

Possibile duplicato di [Come rimuovere file locali (non tracciati) dall'attuale albero di lavoro Git?] (Https://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the- current-git-working-tree) – g00glen00b

risposta

591

È necessario utilizzare git clean -f -d per eliminare file e directory non tracciati nella copia di lavoro.

+35

Anche '-x' se si desidera rimuovere i file .gitignored e tornare a uno stato pristine. – jtdubs

+29

Aggiungere '-n' a test verrebbe rimosso per primo. combinali tutti in un argomento: '-dfn' – HyBRiD

+22

Il mio comando comune è' git clean -qfdx' qui. Rimuovi tutto e fallo in silenzio. – aragaer

36

Se si dispone di file che si vuole ancora mantenere:

git clean -di farà un pulito interattivo che consente di eliminare solo i file/dirs non si desidera più.

-12

Si potrebbe avere fatto un soft reset ad un certo punto, è possibile risolvere il problema effettuando

git add . 
git reset --hard HEAD~100 
git pull 
+5

Non penso che questo sia ciò che l'OP voleva. Entrambe le altre risposte fanno un lavoro molto migliore di mostrare effettivamente come risolvere questo problema. – Avery

+0

Questo può anche essere lento se si devono aggiungere molti file. –

+0

totalmente estraneo. –

20
git reset --hard && git clean -dfx 

o, zsh fornisce un 'gpristine' alias:

alias gpristine='git reset --hard && git clean -dfx' 

Quale è davvero maneggevole

+2

comando molto pericoloso! –

+4

Mi scuso se questo non è un comando sicuro - Non stavo cercando di essere al sicuro, stavo cercando di rispondere alla domanda. Potresti commentare se questo risponde alla domanda? – jjnevis

+0

Questo funziona bene e dovrebbe essere incorporato in git IMHO (anche se non sono sicuro che userei -x di routine). Tante volte sto lavorando a un progetto locale, non ancora sincronizzato con github, ecc. E un refact incasinato va oltre la condizione di 'annullamento' dell'IDE. Il mio istinto è quello di ripristinare l'ultimo commit ma googling di solito prende le risposte per il penultimo commit, non l'ultimo commit. Tutto quello che voglio è tornare al commit più recente. Questo lo fa. Dovrebbe essere un modo più semplice però. Grazie Linus! ;-) –

5

Approccio interattivo utente:

git clean -i -fd 

Remove .classpath [y/N]? N 
Remove .gitignore [y/N]? N 
Remove .project [y/N]? N 
Remove .settings/ [y/N]? N 
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y 
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y 
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y 
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y 
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y 

-i per interattivo
-f per forza
-d directory per
-x per i file ignorati (aggiungere se necessario)

Nota:Aggiungi -n oppure --dry-run per controllare cosa farà.

1

Il comando che stai cercando è git clean

Problemi correlati