Deshacer "git add <dir>"?

186

Agregué por error archivos usando el comando "git add dir". Todavía no he ejecutado "git commit". ¿Hay alguna manera de eliminar este directorio y todo lo que contiene dentro del commit?

Lo intenté git reset dir, pero no funcionó. Aparentemente git reset filees la forma de deshacerlo. Pero tengo tantos archivos y tan poco tiempo.

neoneye
fuente
66
git reset <path>actualiza el índice de esa ruta para que coincida HEAD(la confirmación actual). No toca el árbol de trabajo.
Cascabel

Respuestas:

279

Para eliminar un directorio y todo lo que contiene del índice,

git rm --cached -r dir

El --cachedinterruptor hace que git rmfuncione solo en el índice y no toque la copia de trabajo. El -rinterruptor lo hace recursivo.

Aristóteles Pagaltzis
fuente
12
"Eliminar todo el directorio por etapas del índice" sería una explicación un poco mejor del comando git, ya que para los principiantes de git como yo el comando se parece mucho a si incluso pudiera eliminar el directorio en el sistema de archivos. Solo por cuestión de gustos.
Sascha Gottfried
1
Por eso había pulsado el --cachedinterruptor. Sin embargo, he editado la respuesta para calificar que solo se aplica al índice.
Aristóteles Pagaltzis
@SaschaGottfried gracias por la aclaración, tenía miedo al principio incluso con la edición, pero su comentario lo dejó claro :)
Max von Hippel
casi eliminé toda mi carpeta: S después de esto ... haciendo un git reset HEAD folderarreglo fijo ... pero antes de hacer esto, haz una git status folder, y asegúrate de que diga que 'eliminó' todos los archivos en esa carpeta
Bengalaa
21

Querrás usar git rm --cached -r <dir>. Este comando eliminará el contenido del directorio por etapas del índice.

si el directorio ya fue rastreado, debe encontrar los archivos nuevos y viejos manualmente y desestabilizarlos ...

Probablemente se ejecute git reset <dir>después de eso para restablecer los archivos existentes (y ya rastreados) dentro del directorio.


Actualización 2019:

Simplemente ejecute git reset directory, eliminará todos los archivos recién agregados.

knittl
fuente
no está lo git reset <dir>suficientemente solo?
Bananach
@Bananach Acabo de intentarlo y parece que sí git reset <dir>funcionaría también. La respuesta es de 2011, así que no estoy seguro de si eso ya funcionó hace 8 años. Actualizaré la respuesta. ¡Gracias por la pista!
knittl
11

Directorio de montaje

$ git reset <dir>

Desinstala todos los archivos y carpetas con los que realicé:

$ git add <dir>

Confirmar directorio sin etapas

Para confirmar la eliminación del directorio y su contenido de la puesta en escena (es decir, "Cambios por confirmar"), ejecute lo siguiente:

$ git status

o

$ git diff --staged --name-only 

para confirmar que ninguna de las carpetas o archivos previamente organizados todavía está preparada.

mrduncle1
fuente
2

Un comando simple para eliminar un archivo / carpeta por etapas, que aún no se ha confirmado es - git restore --staged <dir>.

ingrese la descripción de la imagen aquí

Tofan Jena
fuente