git todavía muestra los archivos modificados después de agregarlos a .gitignore

252

Estoy agregando esto al archivo .gitignore

.idea/*

pero de todos modos el estado es:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

Qué estoy haciendo mal ? Incluso agregué .idea / * al global ~ / .gitignore_global pero el estado de git, de todos modos me muestra:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml
Dijo Kaldybaev
fuente

Respuestas:

422

Tu .gitignoreestá funcionando, pero aún sigue los archivos porque ya estaban en el índice.

Para detener esto tienes que hacer: git rm -r --cached .idea/

Cuando confirme, el .idea/directorio se eliminará de su repositorio git y las siguientes confirmaciones ignorarán el .idea/directorio.

PD: podría usar en .idea/lugar de .idea/*ignorar un directorio. Puede encontrar más información sobre los patrones en la página del manual .gitignore .


Cita útil de la git-rmpágina del manual

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.
mcls
fuente
¿Podría explicar a qué se refería con "Solo agregar .idea / funcionaría también". ¿Es esta una solución alternativa para usar .gitignorey luego hacer git rm -cached?
Mehrad
3
@Mehrad no necesita el * en .gitignore
Steve Pitchers
2
No, solo agregar .idea / no funciona, porque como dijiste en la respuesta, ya está en el índice.
Henrique de Sousa
15
Entonces, ¿estás diciendo que necesitas commitdespués de eliminar los archivos en caché? Eso realmente parece contrario a la intuición; Estos son archivos que NO quiero comprometer. Y no quiero que se eliminen del repositorio (solo quiero que ya no estén dando vueltas abarrotando mi git status). ¿O simplemente estoy realmente confundido?
Scott Biggs
66
Git ya ha rastreado sus archivos debido a una confirmación anterior, por lo que para eliminarlos, debe crear una nueva confirmación que los elimine del repositorio.
mcls
47

Para las personas que aún podrían estar buscando este problema, solo están mirando esta página.

Esto lo ayudará a eliminar los archivos de índice en caché y luego solo agregará los que necesita, incluidos los cambios en su .gitignorearchivo.

1. git rm -r --cached .  
2. git add .
3. git commit -m 'Removing ignored files'

Aquí hay un poco más de información.

  1. Este comando eliminará todos los archivos en caché del índice.
  2. Este comando agregará todos los archivos, excepto los que se mencionan en gitignore.
  3. Este comando confirmará sus archivos nuevamente y eliminará los archivos que desea que git ignore, pero los mantendrá en su directorio local.
Sidhanshu_
fuente
1
Esto fue útil para mí, solo notaría que en Windows cmd las comillas simples no parecen funcionar en el n. ° 3. Sin embargo, el uso de git commit -am "Eliminar archivos ignorados" funciona.
Sundance.101
1
No se preocupe, y gracias de nuevo por la respuesta clara y concisa.
Sundance.101
1
Esta solución realmente está jugando con mis archivos de proyecto. Tuve que revertir todo después de hacer esto.
Fatmajk
1

Las soluciones ofrecidas aquí y en otros lugares no funcionaron para mí, por lo que agregaré a la discusión para futuros lectores. Es cierto que todavía no entiendo completamente el procedimiento, pero finalmente he resuelto mi problema (similar) y quiero compartirlo.

Accidentalmente almacené en caché algunos directorios de documentos con varios cientos de archivos al trabajar con git en IntelliJ IDEA en Windows 10, y después de agregarlos .gitignore(y PROBABLEMENTE moverlos un poco) no pude eliminarlos de la Lista de cambios predeterminada.

Primero cometí los cambios reales que había hecho, luego resolví esto, me llevó demasiado tiempo. He intentado git rm -r --cached ., pero siempre lo obtener path-specERRORES, con diferentes variaciones de la path-spec, así como con el -fy -rbanderas.

git statustodavía mostraba los nombres de los archivos, así que intenté usar algunos de esos textualmente git rm -cached, pero no tuve suerte. Guardar y quitar los cambios parecía funcionar, pero se pusieron en cola de nuevo después de un tiempo (soy muy confuso en el plazo exacto). Finalmente he eliminado estas entradas para siempre usando

git reset

Supongo que esto es solo una BUENA IDEA cuando no tiene cambios organizados / almacenados en caché que realmente desea confirmar.

kiloton
fuente
0

Simplemente agregue git rm -r --cached <folder_name/file_name>

A veces, actualiza el archivo .gitignore después del comando de confirmación de los archivos. Entonces, los archivos se almacenan en caché en la memoria. Para eliminar los archivos en caché, use el comando anterior.

Abhilash Ramteke
fuente
-2
  1. Git add.

  2. Estado de Git // Comprobar archivo que se está modificando

    // git reset HEAD --- reemplaza a qué archivo quieres ignorar

  3. git reset HEAD .idea / <- Aquellos que quisieron excluir .idea de antes de confirmar // git comprueban el estado y el archivo de idea se habrá ido, ¡y ya está listo!

  4. git commit -m ''

  5. git push

Lim Kean Phang
fuente
Esto sería una suposición de que el OP quiere reiniciar.
SovietFrontier