2009-12-06 15 views
17

He eliminado un montón de archivos y directorios desde un repositorio Git usando rm, el Finder, etc.¿Cómo agregar y confirmar las eliminaciones realizadas con "rm" en lugar de "git rm"?

Busco un comando de Git que va a grabar estos para el índice como se marca para la eliminación, como si había llamado git rm en ellos.

Entiendo git add -u hará esto, junto con un montón de otras cosas. Me gustaría que mi comando maneje exclusivamente las eliminaciones.

+0

Relacionado, pero no es un duplicado exacto: [Eliminando múltiples archivos de un repositorio de Git que ya han sido eliminados del disco] (http://stackoverflow.com/q/492558/456814). La otra pregunta ya indica que 'git rm' puede representar los archivos eliminados, solo está buscando una forma de representarlos a todos con una sola invocación de' git rm'. –

Respuesta

32

Sin espacios en los nombres de archivo:

$ git rm `git ls-files -d` 

más robusta:

$ git ls-files -z -d | xargs -0 --no-run-if-empty git rm 
+1

Tenga en cuenta que debe ejecutarse desde el directorio de nivel superior de su repositorio. –

4

La respuesta de Charles Bailey me empujó hacia esto, pero todavía recibo con agrado algo más breve.

$ git diff --name-only --diff-filter=D | xargs git rm 
5

Tome una mirada lo Jonio C Hamano escribió en "Re: [PATCH 1/2] Documentation: 'git add -A' can remove files" puesto en la lista de correo de git, a saber, que esta la pregunta parece XY problem (usted está preguntando sobre la solución supuesta Y al problema, en lugar del problema X en sí). La solución al problema (si es realmente "problema XY" situación) podría ser:

  • git commit -a, lo que conteste automáticamente las supresiones, comprometiéndose estado actual de los archivos de seguimiento en el directorio de trabajo

  • git add -A, que agregaría archivos no rastreados no rastreados y eliminaría archivos ya no existentes, por ejemplo si desea crear una confirmación desde una actualización lateral del directorio de trabajo, p. desempaquetar una instantánea o resultado de rsync.

Sin embargo, si lo que se pide es un problema (y no la solución), a continuación, como se puede ver en otras respuestas existen herramientas en el lugar para hacerlo.

0

Este comando le dará una lista de todos los archivos eliminados que se enviarán a git rm. Entonces todos los archivos serán eliminados. Si no se encuentran los archivos eliminados, nada se suceden:

git ls-files -z -d | xargs -0 --no-run-if-empty git rm

2

En Git 2.0, git add se comporta como git add --ignore-removal <pathspec> que ignora los caminos que ha extraído de su árbol de trabajo.

Puede usar git add --all <pathspec> para registrar las eliminaciones.

Ejecute git status para verificar las rutas que eliminó de su árbol de trabajo.

Cuestiones relacionadas