2010-12-01 23 views
366

Cuando ejecuto git reset --hard HEAD, se supone que debe restablecer a una versión prístina de lo que sacó, según tengo entendido. Desafortunadamente, deja archivos por ahí, ya que git status muestra una gran lista de archivos sin seguimiento.git reset --hard HEAD deja archivos sin seguimiento detrás de

¿Cómo le dices a git "Solo devuélvele EXACTAMENTE lo que estaba en la última extracción, nada más, nada menos"?

+27

'git reset --hard' restablece el índice y revierte los archivos rastreados de nuevo a estado como lo son en CABEZA. Deja archivos sin seguimiento solo. – fifigyuri

+0

Posible duplicado de [¿Cómo eliminar archivos locales (sin seguimiento) del árbol de trabajo actual de Git?] (Https://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the- current-git-working-tree) – g00glen00b

Respuesta

591

Tiene que usar git clean -f -d para deshacerse de los archivos y directorios no rastreados en su copia de trabajo.

+35

También '-x' si desea eliminar sus archivos .gitignored y volver a un estado prístino. – jtdubs

+29

Agregar '-n' a la prueba se eliminaría primero. combinar todos ellos en un argumento: '-dfn' – HyBRiD

+22

Mi comando común es' git clean -qfdx' aquí. Elimine todo y hágalo en silencio. – aragaer

36

Si tiene archivos que aún desea mantener:

git clean -di va a hacer una limpieza interactiva que le permite sólo para eliminar los archivos/directorios que no desea más.

-12

Es posible que haya hecho un restablecimiento de software en algún momento, puede resolver este problema haciendo

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

No creo que esto sea lo que OP quería. Cualquiera de las otras respuestas hace un trabajo mucho mejor al mostrar realmente cómo solucionar esto. – Avery

+0

Esto también puede ser lento si tiene muchos archivos para agregar. –

+0

totalmente sin relación. –

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

o, zsh proporciona una 'gpristine' alias:

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

Qué es realmente útil

+2

comando muy peligroso! –

+4

Disculpa si este no es un comando seguro - No estaba tratando de estar seguro, estaba tratando de responder la pregunta. ¿Podría comentar si esto responde la pregunta? – jjnevis

+0

Esto funciona bien y debe integrarse en git IMHO (aunque no estoy seguro de que use -x rutinariamente). Muchas veces estoy trabajando en un proyecto local, todavía no sincronizado con Github, etc., y un refactorio desordenado va más allá del estado de IDE 'deshacer'. Mi instinto es revertir al último commit, pero buscar en Google por lo general lleva a las respuestas para el penúltimo commit, no para el último commit. Todo lo que quiero es volver a la confirmación más reciente. Esto hace eso. Debería ser una manera más fácil sin embargo. Gracias Linus! ;-) –

5

Enfoque de acceso del usuario:

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 para
interactiva -f para la fuerza
-d para el directorio
-x para ficheros ignorados (añadir, si es necesario)

Nota:Añadir -n o --dry-run para comprobar lo que hará.

1

El comando que busca es git clean

Cuestiones relacionadas