GIT: Quiero unstage todos los archivos que coinciden con un cierto patrón
-
26-09-2019 - |
Pregunta
Me gustaría correr
git reset *.foo
Pero esto los errores hacia fuera.
Yo creo que tenga que utilizar un tubo, pero no estoy seguro de cómo hacer esto.
Gracias!
Solución
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
git reset HEAD "$i"
git checkout "$i"
done
Otros consejos
Si está usando Powershell el siguiente trabajo.
gci -re -in *foo | %{ git reset $_ }
Esto debería funcionar en cygwin y UNIX env
git reset $(git diff --name-only --cached | grep *.foo)
En una aplicación GUI como Git SmartGit que sería filtrar los archivos mostrados por el patrón *.foo
, pulse Ctrl + a para seleccionar todos los archivos filtrados e invocar el comando Unstage.
por ejemplo. Quiero hacer coincidir todas las "migraciones" en el camino.
git diff --name sólo | migraciones grep | xargs git checkout
Si desea Pedido (deshacer cambios) de unstaged los archivos modificados que coinciden con un patrón dado, esto funciona:
macOS:
git checkout $(git st -s | sed -E 's/^.{2}//' | grep '\.foo$')
Unix:
git checkout $(git st -s | sed -r 's/^.{2}//' | grep '\.foo$')
Sólo he probado esto con los archivos modificados M
. Tu caso es distinto si se ha cambiado el nombre / borrados / archivos en conflicto también.
El espacio en blanco en el nombre del archivo estaba causando problemas con el git diff
se acerca, pero la siguiente trabajó:
find ./ -name "*.foo" -exec git reset {} \;
La ejecución es prolijo si hay muchos archivos que se van sin preparar.
Sólo tiene que utilizar git reset *mypattern*