2010-11-19 15 views
7

vorrei correreGIT: Voglio unstage tutti i file corrispondenti un certo modello

git reset *.foo 

ma questo gli errori fuori.

Penso di aver bisogno di usare un tubo, ma non sono sicuro di come farlo.

Grazie!

+0

Nota: questi file sono stati gestiti come eliminati. i file non sono più nella mia directory di lavoro. Quindi immagino di aver bisogno di qualcosa come git checkout * .foo – Jacko

risposta

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

Grazie. Ora, il cambiamento graduale è stato quello di eliminare questi file. quindi, funzionerà ancora? il file è effettivamente già cancellato nella directory – Jacko

+0

No, non funzionerà. Aggiornerò la mia risposta con un nuovo comando. – cdhowie

+0

Risposta aggiornata. – cdhowie

6

Se si utilizza Powershell, quanto segue funzionerà.

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

In un'applicazione Git GUI come SmartGit avrei filtrare i file visualizzati dal modello *.foo, premere Ctrl + A per selezionare tutti i file filtrati e richiamare il comando Unstage.

2

Questo dovrebbe funzionare in Cygwin e UNIX ENV

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

Ad es Voglio abbinare tutte le "migrazioni" nel percorso.

git diff --name-only | migrazioni di grep | xargs git checkout

0

Se si vuole cassa (annullare le modifiche) di unstaged file modificati che corrispondono a un determinato modello, questo funziona:

MacOS:

git checkout $(git st -s | sed -E 's/^.{2}//' | grep '\.foo$') 

Unix:

git checkout $(git st -s | sed -r 's/^.{2}//' | grep '\.foo$') 

Ho provato solo questo con i file modificati M. YMMV se i file sono stati rinominati/cancellati/in conflitto.

Problemi correlati