¿Cómo hago para que Git se olvide de un archivo que fue rastreado, pero que ahora está en .gitignore?

Resuelto Ivan asked hace 15 años • 34 respuestas

Puse en la .gitignorelista un archivo que Git estaba rastreando anteriormente. Sin embargo, el archivo todavía aparece git statusdespués de editarlo. ¿Cómo fuerzo a Git a olvidar completamente el archivo?

Ivan avatar Aug 14 '09 02:08 Ivan
Aceptado

.gitignoreevitará que se agreguen archivos sin seguimiento (sin un add -f) al conjunto de archivos rastreados por Git. Sin embargo, Git continuará rastreando cualquier archivo que ya esté siendo rastreado.

Para dejar de rastrear un archivo, debemos eliminarlo del índice:

git rm --cached <file>

Para eliminar una carpeta y todos los archivos de la carpeta de forma recursiva:

git rm -r --cached <folder>

La eliminación del archivo de la revisión principal se producirá en la próxima confirmación.

ADVERTENCIA: Si bien esto no eliminará el archivo físico de su máquina local, sí eliminará los archivos de las máquinas de otros desarrolladores en su próximo archivo git pull.

CB Bailey avatar Aug 13 '2009 20:08 CB Bailey

La serie de comandos a continuación eliminará todos los elementos del índice de Git (no del directorio de trabajo o del repositorio local) y luego actualizará el índice de Git, respetando los ignorados de Git. PD. Índice = caché

Primero:

git rm -r --cached .
git add .

Entonces:

git commit -am "Remove ignored files"

O como una sola línea:

git rm -r --cached . && git add . && git commit -am "Remove ignored files"
Matt Frear avatar Sep 30 '2013 13:09 Matt Frear

git update-indexhace el trabajo por mí:

git update-index --assume-unchanged <file>

Nota: Esta solución es en realidad independiente, .gitignoreya que gitignore es solo para archivos sin seguimiento.


Actualizar, una mejor opción

Desde que se publicó esta respuesta, se ha creado una nueva opción y debería preferirse. Debe usar --skip-worktreewhich es para archivos rastreados modificados que el usuario ya no desea confirmar y conservar --assume-unchangedpara mejorar el rendimiento y evitar que git verifique el estado de los archivos rastreados grandes. Consulte https://stackoverflow.com/a/13631525/717372 para obtener más detalles...

git update-index --skip-worktree <file>

Cancelar

git update-index --no-skip-worktree <file>
Konstantin avatar Nov 27 '2013 11:11 Konstantin
git ls-files -c --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

Esto toma la lista de archivos ignorados, los elimina del índice y confirma los cambios.

thSoft avatar May 23 '2014 22:05 thSoft

La respuesta de copiar y pegar (de una sola línea) es:

git rm --cached -r .; git add .; git status; git commit -m "Ignore unwanted files"

Este comando NO cambiará el contenido del .gitignorearchivo. Ignorará los archivos que ya están comprometidos en un repositorio Git, pero que ahora los hemos agregado a .gitignore.

El comando git status;es para revisar los cambios y podría descartarse.

En última instancia, confirmará inmediatamente los cambios con el mensaje " Ignorar archivos no deseados ".

Si no desea confirmar los cambios, elimine la última parte del comando ( git commit -m "Ignore unwanted files")

youhans avatar Nov 19 '2018 11:11 youhans