git reset --HAD HEAD deja archivos sin seguimiento

584

Cuando corro git reset --hard HEAD, se supone que se restablece a una versión prístina de lo que sacaste, según tengo entendido. Desafortunadamente, deja archivos por ahí, ya que git statusmuestra una gran lista de archivos sin seguimiento.

¿Cómo le dices a git "Solo tráelo EXACTAMENTE a lo que había en el último tirón, nada más, nada menos"?

Karl
fuente
44
git reset --hardrestablece su índice y revierte los archivos rastreados a su estado como están en HEAD. Deja solo los archivos sin seguimiento.
fifigyuri

Respuestas:

904

Debe utilizar git clean -f -dpara deshacerse de los archivos y directorios no rastreados en su copia de trabajo.

Si necesita restablecer todo el repositorio a maestro, incluidos todos los submódulos git, ejecute este script:

git reset --hard HEAD
git clean -f -d
git checkout master
git fetch origin master
git reset --hard origin/master
git pull
git submodule update
git submodule update --init --recursive
git submodule foreach git reset --hard HEAD
git submodule foreach git clean -f -d
git submodule foreach git submodule update --init --recursive
git submodule foreach git fetch
git submodule foreach git pull
git status
knittl
fuente
56
Además, -xsi desea eliminar sus archivos .gitignored y volver a un estado impecable.
jtdubs
44
Agregar -na prueba se eliminaría primero. combinarlos todos en un argumento:-dfn
HyBRiD
31
Mi comando común está git clean -qfdxaquí. Elimina todo y hazlo en silencio.
aragaer
3
-d -fse pueden decalred dos veces -dffpara -d -f -f, esto eliminará todos los directorios sin seguimiento sin seguimiento, incluidos los directorios protegidos.
ThorSummoner
3
@BKSpurgeon: sí, elimina archivos. ¿Qué quiere decir con "Quiero archivos sin seguimiento como estaban antes"? Git no sabe nada acerca de los archivos no rastreados, excepto que existen. No rastrea múltiples versiones de estos archivos (ya que no están rastreadas ).
knittl
61

Si tiene archivos que aún desea conservar:

git clean -di realizará una limpieza interactiva que le permite eliminar solo los archivos / directorios que ya no desea.

Sogger
fuente
48
git reset --hard && git clean -dfx

o, zsh proporciona un alias 'gpristino':

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

Lo cual es realmente útil.

Si trabaja en un repositorio bifurcado, asegúrese de buscar y restablecer desde el repositorio / rama correcto, por ejemplo:

git fetch upstream && git reset --hard upstream/master && git clean -df
jjnevis
fuente
8
Disculpas 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
3
Esto funciona bien y debería integrarse en git IMHO (aunque no estoy seguro de que usaría -x de forma rutinaria). Muchas veces estoy trabajando en un proyecto local, aún no sincronizado con github, etc., y un refactor desordenado va más allá del estado IDE 'deshacer'. Mi instinto es volver a la última confirmación, pero buscar en Google generalmente requiere respuestas para la penúltima confirmación, no la última confirmación. Todo lo que quiero es volver a la confirmación más reciente. Esto hace eso. Sin embargo, debería ser una manera más fácil. Gracias linus! ;-)
Dell Anderson
55
Es peligroso porque también elimina los archivos ignorados con -xsimilares si hubiera clonado el repositorio. Si eso es lo que quieres, es perfecto. Si solo desea eliminar archivos no rastreados , eliminar la -xopción funciona bien.
Emile Bergeron
2
Gracias a Dios porgpristine
Snowcrash
2
y elimina la configuración de intellij;)
Kalpesh Soni
17

Enfoque interactivo 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 interactivo
-f para forzar
-d para directorio
-x para archivos ignorados (agregue si es necesario)

Nota: Agregue -n o --dry-run para verificar lo que hará.

bit_cracker007
fuente
4

Puedes usar git stash. Tienes que especificar --include-untracked, de lo contrario terminarás con el problema original.

git stash --include-untracked

Luego simplemente suelta la última entrada en el alijo

git stash drop

Puede hacer un alias práctico y elegante para eso, y llamarlo, git wipepor ejemplo:

git config --global alias.wipe "! git stash -q --include-untracked && git stash drop -q"
Nikola Diklic
fuente
2

El comando que estás buscando es git clean

Jagriti Kumari
fuente
44
La próxima vez, agregue un poco más de descripción / ejemplos, etc. Lo que sea que ayude al usuario a comprender lo que hace y, en este caso, qué parámetros usar.
rugk
1

git-clean Utilícelo para eliminar archivos no rastreados en el árbol de trabajo. Las siguientes son algunas opciones (en resumen) que se pueden usar con el git cleancomando.

-dutilizar cuando no se especifica ninguna ruta. Entonces git recurse en directorios no rastreados, elimínelos.

-f/--force Para eliminar archivos anidados no rastreados.

-i/--interactive Muestra lo que se haría y limpia los archivos de forma interactiva.

-n/--dry-run Muestra lo que sucederá sin quitar nada.

-x ignorar archivos

ejemplo: git clean -f -d-> Eliminar todos los archivos no rastreados en el directorio actual cualquier subdirectorio.

Yuresh Karunanayake
fuente
-16

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

git add .
git reset --hard HEAD~100
git pull
usuario3780587
fuente
77
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
1
Esto también puede ser lento si tiene muchos archivos para agregar.
Devin G Rhode
44
totalmente sin relación
Azeem Hassni
1
Al hacer esto, se eliminan los archivos no rastreados. Pero como programadores, todos deberían tratar de encontrar la solución correcta para los problemas sin usar soluciones alternativas y sonreír.
Yuresh Karunanayake