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!

¿Fue útil?

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*

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top