2010-11-19 9 views
7

Я хотел бы запуститьGIT: Я хочу, чтобы убрать из буфера все файлы, соответствующие определенному шаблону

git reset *.foo 

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

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

Спасибо!

+0

Примечание: эти файлы были поставлены как удаленные. то есть файлы больше не находятся в моем рабочем каталоге. Так что я думаю, мне нужно что-то вроде git checkout * .foo – Jacko

ответ

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

Спасибо. Теперь поэтапным изменением было удаление этих файлов. так будет ли это работать? файл на самом деле уже удален в каталоге – Jacko

+0

Нет, это не сработает. Я обновляю свой ответ с помощью новой команды. – cdhowie

+0

Отвечено обновлено. – cdhowie

6

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

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

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

2

Это должно работать в Cygwin и UNIX окр

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

Э.Г. Я хочу сопоставить все «миграции» в пути.

git diff --name-only | grep migrations | xargs мерзавец фотографии

0

Если вы хотите проверки (отменить изменения) в 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, если вы также переименовали/удалили/конфликтуют файлы.