Tengo un repositorio de Git que eliminé cuatro archivos del uso rm
( no git rm
), y mi estado de Git se ve así:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
¿Cómo elimino estos archivos de Git sin tener que pasar manualmente y agregar cada archivo de esta manera?
git rm file1 file2 file3 file4
Idealmente, estoy buscando algo que funcione de la misma manera que lo git add .
hace, si eso es posible.
git
git-commit
git-add
git-rm
Codebeef
fuente
fuente
git rm
, la eliminación podría haber sido desde una herramienta separada, IDE o administrador de archivos. Visual Studio para uno puede ser una molestia al eliminar / renombrar archivos.git rm
es un poco como preguntar por qué no usagit vim
ogit cd
. Es algo estúpido tener que hacer, y git debería tener un comando o alias incorporado para eliminar los archivos eliminados de la puesta en escena, y no debería tener que buscarlo en SO o leer páginas de manual en su hora de almuerzo.Respuestas:
Para Git 1.x
Esto le dice a git que organice automáticamente los archivos rastreados, incluida la eliminación de los archivos rastreados previamente.
Para Git 2.0
Para organizar todo su árbol de trabajo:
Para representar solo la ruta actual:
fuente
git add -u folder/
para ejecutar esta operación en una carpetapodría ser lo que estás buscando ... funciona para mí ...
fuente
git ls-files --deleted -z | xargs -0 git rm
Puedes usar
Para agregar los archivos eliminados al área de ensayo, luego confírmelos
fuente
Si simplemente ejecutas:
git actualizará su índice para saber que los archivos que ha eliminado deberían formar parte de la próxima confirmación. Luego puede ejecutar "git commit" para registrar ese cambio.
O, si corres:
Tomará automáticamente estos cambios (y cualquier otro) y los confirmará.
Actualización : si solo desea agregar archivos eliminados, intente:
fuente
git commit -a
haré lo que quiera, excepto que en algunos casos tengo archivos que no quiero comprometer, así que quiero preparar el compromiso manualmente.Probablemente estés buscando -A:
Esto es similar a git add -u, pero también agrega nuevos archivos. Esto es aproximadamente el equivalente al
addremove
comando de hg (aunque la detección de movimiento es automática).fuente
Para organizar solo los archivos eliminados :
O (la forma xargs):
Puede alias su conjunto de comandos preferido para su uso posterior conveniente.
fuente
xargs
son unos 15 minutos para dominar.git status | awk '/deleted/ {print $3}' | xargs git rm
sería una forma más corta de hacerlo.grep | awk
... Solo diga No.git rm $(git ls-files --deleted)
No es esto más conveniente (copiado de esto ).git ls-files --deleted | while read f; do git rm $f; done
xargs
es probablemente más eficiente que un ciclo while para una lista enorme, ya que pasa más de un argumento cada vez que se ejecutagit rm
. Para limitar el número de argumentos pasadosgit rm
cada vez que se ejecuta, use la-n
opción:git ls-files --deleted | xargs -n 15 git rm
Antes o después de eliminar el archivo real.
fuente
rm
y lamentando más tarde.git add -u
? Parece que sería más seguro agregar los archivos específicos que se eliminaron al commit, en lugar de agregar TODOS los cambios.Al usar git-add con las opciones '--todos' o '--update' puede obtener más de lo que desea. Los archivos nuevos y / o modificados también se agregarán al índice. Tengo una configuración de bash alias para cuando quiero eliminar archivos eliminados de git sin tocar otros archivos:
Todos los archivos que se han eliminado del sistema de archivos se agregan al índice como eliminados.
fuente
No es que realmente importe, pero no estoy de acuerdo con la respuesta elegida:
... eliminará los archivos del índice si se han eliminado los archivos correspondientes en el árbol de trabajo, pero también organizará los nuevos contenidos modificados de los archivos rastreados.
... por otro lado, solo rm los archivos eliminados que fueron rastreados.
Entonces, este último en mi opinión es la mejor opción.
fuente
Si esos son los únicos cambios, simplemente puede hacer
para cometer todos los cambios. Eso incluirá archivos eliminados.
fuente
es la mejor opción para agregar solo archivos eliminados.
Aquí hay algunas otras opciones.
fuente
git add -u
-u --update Solo coincide con archivos ya rastreados en el índice en lugar del árbol de trabajo. Eso significa que nunca organizará nuevos archivos, sino que organizará nuevos contenidos modificados de archivos rastreados y que eliminará archivos del índice si se han eliminado los archivos correspondientes en el árbol de trabajo.
Si no se proporciona, el valor predeterminado es "."; en otras palabras, actualice todos los archivos rastreados en el directorio actual y sus subdirectorios.
fuente
git add -u
. ¿De dónde vienen todas las otras cosas en su respuesta, la documentación? Debe vincular a la documentación y citarla en bloque si es así.Esa solución simple funciona bien para mí:
fuente
Si desea agregarlo a su
.gitconfig
hacer esto:Entonces todo lo que tienes que hacer es correr:
fuente
git config --global alias.rmd '!git ls-files --deleted -z | xargs -0 git rm'
Esto eliminará todos los archivos eliminados que git rastreó anteriormente, y manejará el caso en el que los nombres de los archivos tienen espacios en ellos.
Dependiendo de su variante POSIX, es posible que necesite usar
xargs -0 -r
: esto causaráxargs
que salga con gracia cuando se canalice contenido nulo.EDITAR:
--cached
y las--deleted
banderas se usan en conjunto para proteger contra la eliminación accidental de archivos que aún no se han eliminado.fuente
Dígale al comando que organice automáticamente los archivos que se han modificado y eliminado, pero los archivos nuevos que no le ha dicho a Git no se ven afectados:
o
fuente
Lo siguiente funcionará, incluso si tiene muchos archivos para procesar:
Probablemente también quieras comprometerte con un comentario.
Para más detalles, consulte: Scripts útiles de Git
fuente
Utilice
-t
para ver qué comando se está ejecutando realmenteAcabo de ajustar la respuesta de Virender para hacer lo mismo:
fuente
Ninguno de los indicadores de git-add solo organizará los archivos eliminados; si todo lo que ha modificado son archivos eliminados, entonces está bien, pero de lo contrario, debe ejecutar git-status y analizar la salida.
A partir de la respuesta de Jeremy, esto es lo que obtuve:
grep -v
líneas.git rm
.Pegando esto en un alias de shell ahora ...
fuente
Como se mencionó
organiza los archivos eliminados para su eliminación, PERO TAMBIÉN modifica los archivos para su actualización.
Para desestabilizar los archivos modificados que puedes hacer
si desea mantener sus compromisos organizados y limpios.
NOTA: Esto también podría desestabilizar los archivos eliminados, así que tenga cuidado con esos comodines.
fuente
Esto funcionó para mí después de que ya había eliminado los archivos.
fuente
Necesitaba lo mismo y utilicé el botón "etapa cambiada" de git gui. También agrega todo.
Y después de "cambio de escenario" hice "commit" ...
entonces mi directorio de trabajo está limpio nuevamente.
fuente
Elimina todos los archivos enumerados por el
git ls-files
comando (-d mostrar solo archivos eliminados). No funciona para archivos con espacios en el nombre de archivo o ruta, pero es fácil de recordarfuente
Puede usar
git add -u <filenames>
para organizar solo los archivos eliminados.Por ejemplo, si eliminó los archivos
templates/*.tpl
, usegit add -u templates/*.tpl
.Se
-u
requiere para hacer referencia a los archivos que existen en el repositorio pero que ya no existen en el directorio de trabajo. De lo contrario, el valor predeterminado degit add
es buscar los archivos en el directorio de trabajo, y si especifica los archivos que ha eliminado allí, no los encontrará.fuente
Agregar alias del sistema para organizar archivos eliminados como comando
rm-all
UNIX
alias rm-all='git rm $(git ls-files --deleted)'
Ventanas
doskey rm-all=bash -c "git rm $(git ls-files --deleted)"
Nota
Windows necesita tener
bash
instalado.fuente
(Otra variación más)
Quería eliminar todos los archivos ya eliminados de los discos pero de una carpeta específica, dejando intactas las otras carpetas. Lo siguiente funcionó para mí:
fuente
algo como
puede hacerlo
fuente
git diff --diff-filter=D --name-only | xargs git rm
Para proyecto de estudio visual
que es útil cuando la ruta del archivo eliminado tiene espacio
fuente
La solución más flexible que he encontrado hasta la fecha es
Y seleccione todos los archivos eliminados que quiero poner en escena.
(Tenga en cuenta que generalmente hago todo lo de la línea de comandos en git, pero git maneja los archivos eliminados un poco incómodo).
fuente
git add -u path/to/my/deleted-files-pattern-*.yml
así que esta fue la mejor respuesta para mí (no querer organizar todos los archivos eliminados, sino 50 de un par de cientos).