¿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".


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.


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.


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.


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

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 ]


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.


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 
    

¿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"


1

utilizar

git reset HEAD

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


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 -- .

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

-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ó.


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.


2
¡Esto está mal y es peligroso! OP quiere "agregar manualmente" los archivos nuevamente, pero los --hardelimina para siempre.
— Antony Hatchkins el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.