2010-11-19 11 views

Respuesta

7
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do 
    git reset HEAD "$i" 
    git checkout "$i" 
done 
+0

Gracias. Ahora, el cambio por etapas fue para eliminar estos archivos. Entonces, ¿esto todavía funcionará? el archivo ya está eliminado en el directorio – Jacko

+0

No, eso no funcionará. Actualizaré mi respuesta con un nuevo comando. – cdhowie

+0

Respuesta actualizada. – cdhowie

6

Si está utilizando Powershell, lo siguiente funcionará.

gci -re -in *foo | %{ git reset $_ } 
2

En una aplicación GUI como Git SmartGit Me filtrar los archivos mostrados por el patrón *.foo, pulse Ctrl + A para seleccionar todos los archivos filtrados e invocar el comando Unstage.

2

Esto debería funcionar en cygwin y env UNIX

git reset $(git diff --name-only --cached | grep *.foo) 
1

P. ej Quiero hacer coincidir todas las "migraciones" en la ruta.

git diff --name only | migraciones de grep | xargs git checkout

0

Si desea la caja (deshacer los cambios) de unstaged 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$') 

Solo he probado esto con M archivos modificados. YMMV si tiene archivos renombrados/eliminados/en conflicto también.

Cuestiones relacionadas