¿Cómo hago para que Git se olvide de un archivo que fue rastreado, pero que ahora está en .gitignore?
Puse en la .gitignore
lista un archivo que Git estaba rastreando anteriormente. Sin embargo, el archivo todavía aparece git status
después de editarlo. ¿Cómo fuerzo a Git a olvidar completamente el archivo?
.gitignore
evitará 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
.
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"
git update-index
hace el trabajo por mí:
git update-index --assume-unchanged <file>
Nota: Esta solución es en realidad independiente, .gitignore
ya 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-worktree
which es para archivos rastreados modificados que el usuario ya no desea confirmar y conservar --assume-unchanged
para 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>
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.
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 .gitignore
archivo. 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"
)