¿Cómo eliminar archivos del área de preparación de git?

551

Realicé cambios en algunos de mis archivos en mi repositorio local, y luego hice lo git add -Aque creo que agregó demasiados archivos al área de preparación. ¿Cómo puedo eliminar todos los archivos del área de ensayo?

Después de hacer eso, lo haré manualmente git add "filename".

omega
fuente
2
Esperemos que esté buscando esto: stackoverflow.com/questions/1505948/…
sumitb.mdi
27
git statusya te dice exactamente qué hacer si quieres quitar los archivos de escena.
Michael Foukarakis el
66
@MichaelFoukarakis git status no es tan útil si quieres unstage un directorio completo si se inunda el terminal con salida (como node_modules)
whiterook6
2
En el futuro, en lugar de agregar todo, es posible que desee sentirse cómodo con git add -po git add --patch(son lo mismo). Ese indicador le permite seleccionar de forma interactiva qué archivos o cambios individuales desea organizar: luego puede obtener una mayor precisión con el trabajo que incluye en la confirmación.
Gabe

Respuestas:

691

Puede eliminar los archivos del escenario usando el índice

git reset HEAD -- path/to/file

De la misma manera git add, puede eliminar los archivos de forma recursiva de forma recursiva por directorio, etc.

git reset HEAD -- .

Además, para referencia futura, la salida de git statusle indicará los comandos que necesita ejecutar para mover archivos de un estado a otro.

Ash Wilson
fuente
55
$ git reset HEAD -- .fatal: Failed to resolve 'HEAD' as a valid ref.Nota producida que nunca hice ninguna confirmación; es el primero git adddespuésgit init
Patrizio Bertoni
55
También puedes usar git reset @.
alex
@alex ¿Es mejor que simplemente simple git reset?
Antony Hatchkins
77
@AntonyHatchkins @es sinónimo de HEAD.
alex
Totalmente trabajado para mí, gracias!
wayneseymour
305

Utilizar

git reset

para desestabilizar todos los archivos organizados.

Antony Hatchkins
fuente
3
¿Puedo preguntar en qué se diferencia esto git reset HEAD --o es simplemente una forma más sucinta de realizar la misma operación?
ProNotion
1
@ProNotion Reset utiliza HEADde forma predeterminada. ¿Cuál es el propósito de aquellos --en tu git reset HEAD --?
Antony Hatchkins
@AntonyHatchkins debería haber sido seguido por un punto (punto) y se tomó del ejemplo en la respuesta aceptada.
ProNotion el
11
@ProNotion Lo siento, te he entendido mal. git reset HEAD -- .es diferente porque solo restablece los archivos en el directorio actual y debajo mientras git resetrestablece todos los archivos en el proyecto.
Antony Hatchkins el
101

Si ya ha confirmado una gran cantidad de archivos no deseados, puede quitarlos del escenario y decirle a git que los marque como eliminados (sin eliminarlos realmente) con

git rm --cached -r .

--cachedle dice que elimine las rutas de la puesta en escena y el índice sin eliminar los archivos y -ropera en directorios de forma recursiva. Luego, puede git addseguir los archivos que desea seguir.

Max
fuente
Supongo que es "git rm -".
Alexander Mills
1
hay un error fatal al no eliminar archivos con "git rm -".
Alexander Mills
@AlexMills Actualizo mi respuesta para mencionar las opciones reales para rmdesestadificar todos los archivos.
Max
2
Intenté esto en un archivo singular como este: "git rm --cached my / file.java" y veo ese archivo todavía en el área de preparación, ¡pero como eliminado! @Max cuando ejecuta este comando, ¿sus archivos realmente se eliminan o simplemente no se organizan? Si no está buscando ese comportamiento, iría con la respuesta.
OrwellHindenberg
@OrwellHindenberg, gracias por señalarlo. --cachedes realmente dejar de rastrear archivos que ya has comprometido. Entonces el archivo no se elimina realmente, pero git cree que sí. He aclarado esto en mi respuesta.
Max
30

Podrías usar

git reset HEAD

luego agregue los archivos específicos que desee con

git add [directory/]filename
Sábalo
fuente
Puede agregar el parámetro -x y los archivos ignorados también se eliminarán. Es útil si te equivocas con tu .gitignore y tienes algo útil allí (como en mi caso). ( git-scm.com/docs/git-clean )
Keeprock
1
Con el exceso de carpetas, git statusle dirá que el directorio de trabajo está limpio : ¡mentiras! git clean -dfhizo este trabajo, gracias.
Leo
55
Tenga en cuenta que git clean -dfeliminará los archivos de forma permanente. En sistemas similares a UNIX, llamará unlink()y sus archivos eliminados no serán recuperables.
Hanxue
11
El OP pregunta sobre la eliminación de los archivos. Le aconsejas que elimine los archivos. Le sugiero que lea sobre el área de preparación antes de responder.
Antony Hatchkins
Gracias por eliminar todo mi proyecto no guardado.
Vansuita Jr.
7

Como se señaló en otras respuestas, debe usar git reset. Esto deshacerá la acción de git add -A.

Nota: git reset es equivalente a lo git reset --mixedque hace esto

Restablece el índice pero no el árbol de trabajo (es decir, los archivos modificados se conservan pero no se marcan para confirmar) e informa lo que no se ha actualizado. Esta es la acción por defecto. [ git reset ]

Dan Rosenstark
fuente
2
.. y para eliminar un solo archivo del área de preparación, puede hacerlogit reset filenameToNotCommit
SherylHohman
5

Ahora en v2.24.0 sugiere

git restore --staged .

para desensamblar archivos.

norixxx
fuente
1

Puede restablecer el área de preparación de varias maneras:

  1. Restablezca HEAD y agregue todos los archivos necesarios para registrarse nuevamente como se muestra a continuación:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    
Amit Kaneria
fuente
¿Qué hace que esta respuesta sea diferente de las seis respuestas existentes?
Antony Hatchkins
1

Para eliminar todos los archivos del área de preparación, use:
git reset
Para eliminar archivos específicos, use:
git reset "File path"

Akash Bisariya
fuente
1

utilizar

git reset HEAD

Esto eliminará todos los archivos del área de preparación

Ajith
fuente
1

Si se agregaron archivos no deseados al área de preparación pero aún no se confirmaron, entonces un simple restablecimiento hará el trabajo:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Para eliminar solo los cambios por etapas en el directorio de trabajo actual, use:

git checkout -- .
Vlad Bezden
fuente
0

Use " git reset HEAD <file>..." para quitar el escenario de los archivos

Ej: desestadificar todos los archivos

git reset HEAD .

quitar el escenario de un archivo

git reset HEAD nameFile.txt
Amirouche Zeggagh
fuente
-3

Intenté todos estos métodos pero ninguno funcionó para mí. Quité archivo .git utilizando rm -rf .gitforma el repositorio local y luego otra vez lo hice git inity git addy los comandos de rutina. Funcionó.

Bhaskar Dhariyal
fuente
44
Leer los documentos de Git es generalmente más gratificante que seguir los consejos de xkcd.com/1597 ;)
Antony Hatchkins
1
Tal vez tuvo un problema de integridad en su caso específico y esta fue la opción que queda, pero no se recomienda.
Sábado
Por favor, no hagas esto, destruirás todo tu repositorio de git.
Lennart Rolland
-5

La mejor manera de deshacer su archivo que ya está en el área de preparación es git reset --hard, que recupera sus archivos almacenados. Cuidado ahora, eso eliminará los cambios por etapas y por etapas.

datos pix
fuente
2
¡Esto está mal y es peligroso! OP quiere "agregar manualmente" los archivos nuevamente, pero los --hardelimina para siempre.
Antony Hatchkins el