GIT: я хочу удалить все файлы, соответствующие определенному шаблону - PullRequest
8 голосов
/ 19 ноября 2010

Я хотел бы запустить

git reset *.foo

, но это ошибка.

Я думаю, что мне нужно использовать трубу, но я не уверен, как это сделать.*

Спасибо!

Ответы [ 6 ]

8 голосов
/ 19 ноября 2010
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
    git reset HEAD "$i"
    git checkout "$i"
done
6 голосов
/ 19 ноября 2010

Если вы используете Powershell, будет работать следующее.

gci -re -in *foo | %{ git reset $_ } 
3 голосов
/ 29 апреля 2013

Это должно работать в cygwin и unix env

git reset $(git diff --name-only --cached | grep *.foo)
2 голосов
/ 19 ноября 2010

В приложении Git GUI, таком как SmartGit Я отфильтрую отображаемые файлы по шаблону *.foo, нажмите Ctrl + A, чтобы выбрать все отфильтрованные файлы и вызвать команду Unstage.

1 голос
/ 28 июня 2014

например. Я хочу сопоставить все "миграции" в пути.

git diff --name-only | grep миграции | xargs git checkout

0 голосов
/ 11 января 2018

Если вы хотите оформить заказ (отменить изменения) из unstaged измененных файлов, соответствующих заданному шаблону, это работает:

Macos:

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

Unix:

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

Я проверял это только с M измененными файлами. YMMV, если вы также переименовали / удалили / конфликтовали файлы.

...