restaurar - git--amend
Eliminar mĂșltiples archivos de un repositorio de Git que ya han sido borrados del disco (28)
Probablemente estés buscando -A:
git add -A
esto es similar a git add -u, pero también agrega nuevos archivos. Esto es más o menos el equivalente del comando addremove
de hg (aunque la detección de movimiento es automática).
Tengo un repo de Git que he eliminado cuatro archivos de usar rm
( no git rm
), y mi estado de Git es 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 como este?
git rm file1 file2 file3 file4
Idealmente, estoy buscando algo que funcione de la misma manera que git add .
si, si eso es posible
Puedes usar
git add -u
Para agregar los archivos eliminados al área de ensayo, compóralos
git commit -m "Deleted files manually"
Si esos son los únicos cambios, simplemente puede hacer
git commit -a
para comprometer todos los cambios Eso incluirá archivos eliminados.
Ninguno de los indicadores a git-add solo mostrará 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 el resultado.
Trabajando en la respuesta de Jeremy, esto es lo que obtuve:
git status | sed -s "s/^.*deleted: //" | grep "/(/#/|commit/)" -v | xargs git rm
- Obtener el estado de los archivos.
- Para los archivos eliminados, aísle el nombre del archivo.
- Elimine todas las líneas que comiencen con #s, así como una línea de estado que tenga la palabra "eliminada"; No recuerdo exactamente lo que era, y ya no está allí, por lo que quizás deba modificar esto para diferentes situaciones. Creo que la agrupación de expresiones puede ser una característica específica de GNU, por lo que si no está utilizando gnutils, puede que tenga que agregar varias líneas
grep -v
. - Pase los archivos a
git rm
.
Pegar esto en un alias de shell ahora ...
Necesitaba lo mismo y usé el botón "cambio de escenario" de git gui. también agrega todo.
Y después de "etapa cambiada" hice "commit" ...
entonces mi directorio de trabajo está limpio nuevamente.
Al usar git-add con las opciones ''--all'' o ''--update'', puede obtener más de lo que deseaba. Los archivos nuevos y / o modificados también se agregarán al índice. Tengo una configuración bash alias para cuando quiero eliminar archivos eliminados de git sin tocar otros archivos:
alias grma=''git ls-files --deleted -z | xargs -0 git rm''
Todos los archivos que se han eliminado del sistema de archivos se agregan al índice como eliminados.
No es que realmente importe, pero no estoy de acuerdo con la respuesta elegida:
git add -u
... eliminará los archivos del índice si se eliminaron los archivos correspondientes en el árbol de trabajo, pero también incluirá los nuevos contenidos modificados de los archivos rastreados.
git rm $(git ls-files --deleted)
... por otro lado, solo se ejecutarán los archivos eliminados que fueron rastreados.
Entonces este último en mi opinión es la mejor opción.
git ls-files --deleted | xargs git rm
es la mejor opción para agregar solo archivos eliminados.
Aquí hay algunas otras opciones.
git add . => Add all (tracked and modified)/new files in the working tree.
git add -u => Add all modified/removed files which are tracked.
git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.
git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
La solución más flexible que he encontrado hasta la fecha es
git cola
Y seleccione todos los archivos eliminados que quiero representar.
(Nota: generalmente hago todo lo que se usa en git, pero git maneja los archivos extraídos un poco incómodos).
Como se mencionó
git add -u
etapas los archivos eliminados para su eliminación, PERO TAMBIÉN los archivos modificados para la actualización.
Para dejar de grabar los archivos modificados, puede hacer
git reset HEAD <path>
si te gusta mantener tus commits organizados y limpios.
NOTA: Esto también podría borrar los archivos eliminados, así que ten cuidado con esos comodines.
Puede usar git add -u <filenames>
para organizar los archivos eliminados solamente.
Por ejemplo, si eliminó las templates/*.tpl
archivos templates/*.tpl
, entonces use git add -u templates/*.tpl
.
El -u
es necesario para hacer referencia a archivos que existen en el repositorio pero que ya no existen en el directorio de trabajo. De lo contrario, el valor predeterminado de git add
es buscar los archivos en el directorio de trabajo, y si especifica los archivos que ha eliminado allí, no los encontrará.
Si simplemente ejecuta:
git add -u
git actualizará su índice para saber que los archivos que ha eliminado deberían formar parte de la siguiente confirmación. Luego puede ejecutar "git commit" para verificar ese cambio.
O, si ejecuta:
git commit -a
Tomará automáticamente estos cambios (y cualquier otro) y los comprometerá.
Actualización : si solo desea agregar archivos eliminados, intente:
git ls-files --deleted -z | xargs -0 git rm
git commit
Lo siguiente funcionará, incluso si tiene que procesar muchos archivos:
git ls-files --deleted | xargs git rm
Probablemente también quieras comprometerte con un comentario.
Para más detalles, consulte: Guiones útiles de Git
algo como
git status | sed -s "s/^.*deleted: //" | xargs git rm
puede hacerlo
git ls-files --deleted -z | xargs -0 git rm --cached
Esto eliminará todos los archivos eliminados que git ha rastreado anteriormente, y también manejará el caso en el que los nombres de los archivos tengan espacios.
Dependiendo de su variante POSIX, es posible que necesite usar xargs -0 -r
: esto hará que xargs
salga con gracia cuando contenga contenido nulo.
EDIT: --cached
y --deleted
flags se usan en tándem para proteger contra la eliminación accidental de archivos que no han sido eliminados.
Para el proyecto de estudio visual
''git ls-files --deleted | sed ''s/(.*)/"/1"/''| xargs git rm''
que es útil cuando la ruta del archivo eliminado tiene espacio
Agregar alias del sistema para organizar archivos eliminados como comando rm-all
alias rm-all=''git rm $(git ls-files --deleted)''
UNIX alias rm-all=''git rm $(git ls-files --deleted)''
WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"
Nota
Windows necesita tener bash
instalado.
Para Git 1.x
$ git add -u
Esto le indica a git que realice automáticamente la etapa de los archivos rastreados, incluida la eliminación de los archivos rastreados anteriormente.
Para Git 2.0
Para escenificar tu árbol de trabajo completo:
$ git add -u :/
Para poner en escena solo la ruta actual:
$ git add -u .
git commit -m ''commit msg'' $(git ls-files --deleted)
Esto funcionó para mí después de que ya había eliminado los archivos.
git add -u
-u --update Solo coincide con archivos ya rastreados en el índice en lugar del árbol de trabajo. Esto significa que nunca creará nuevos archivos, sino que creará nuevos contenidos modificados de los archivos rastreados y eliminará los archivos del índice si se eliminaron los archivos correspondientes en el árbol de trabajo.
Si no se proporciona, por defecto es "."; en otras palabras, actualice todos los archivos rastreados en el directorio actual y sus subdirectorios.
Intentalo.
-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.
git add . && git commit -m -a "Your commit"
o
git add --all && git commit -m "Your commit"
git ls-files --deleted -z | xargs -0 git rm
podría ser lo que estás buscando ... me funciona ...
Esa solución simple funciona bien para mí:
git rm $(git ls-files --deleted)
git rm test.txt
Antes o después de eliminar el archivo real.
Utilice -t
para ver qué comando se está ejecutando realmente
Acabo de ajustar la respuesta de Virender para hacer lo mismo:
git ls-files --deleted -z | xargs -t -0 git rm
(Sin embargo, otra variación)
Quería eliminar todos los archivos ya eliminados de los discos, pero de una carpeta específica, dejando las otras carpetas intactas. Lo siguiente funcionó para mí:
git ls-files --deleted | grep <folder-name> | xargs git rm
Para organizar solo los archivos eliminados :
for x in `git status | grep deleted | awk ''{print $3}''`; do git rm $x; done
O (la forma xargs):
git status | awk ''/deleted/ {print $3}'' | xargs git rm
Puede alias su conjunto de comandos preferido para un uso posterior conveniente.
Si desea agregarlo a su .gitconfig
haga esto:
[alias]
rma = !git ls-files --deleted -z | xargs -0 git rm
Entonces, todo lo que tienes que hacer es ejecutar:
git rma