2010-11-19 4 views
7

passende würde Ich magGIT: Ich möchte alle Dateien unstage ein bestimmtes Muster

git reset *.foo 

aber diese Fehler laufen.

Ich denke, ich muss ein Rohr verwenden, aber ich bin mir nicht sicher, wie das geht.

Danke!

+0

Hinweis: Diese Dateien wurden als gelöscht bereitgestellt. die Dateien befinden sich nicht mehr in meinem Arbeitsverzeichnis. Also ich denke, ich brauche etwas wie git checkout * .foo – Jacko

Antwort

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

Danke. Jetzt war die gestufte Änderung, diese Dateien zu löschen. Also, wird das noch funktionieren? die Datei ist tatsächlich bereits im Verzeichnis – Jacko

+0

gelöscht Nein, das wird nicht funktionieren. Ich werde meine Antwort mit einem neuen Befehl aktualisieren. – cdhowie

+0

Antwort aktualisiert. – cdhowie

6

Wenn Sie Powershell verwenden, funktioniert das Folgende.

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

In einer Anwendung Git GUI wie SmartGit ich durch das Muster der angezeigten Dateien würden filtern *.foo, drücken Sie Strg + A, um alle gefilterten Dateien auszuwählen und den Unstage Befehl aufrufen.

2

Diese in Cygwin und Unix-env

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

Z. B. sollte funktionieren Ich möchte alle "Migrationen" im Pfad abgleichen.

git diff - nur-Name | grep Migrationen | xargs git Kasse

0

Wenn Sie Kasse wollen (Änderungen rückgängig machen) von unstaged geänderten Dateien auf ein bestimmtes Muster übereinstimmt, das funktioniert:

macOS:

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

Unix:

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

Ich habe dies nur mit M modifizierten Dateien getestet. YMMV, wenn Sie auch umbenannte/gelöschte/konfliktbehaftete Dateien haben.