I would like to run
git reset *.foo
but this errors out.
I think I need to use a pipe, but I'm not sure how to do this.
Thanks!
I would like to run
git reset *.foo
but this errors out.
I think I need to use a pipe, but I'm not sure how to do this.
Thanks!
for i in `git status --porcelain | grep '^D.*\.foo$' | sed 's/^D \+//'`; do
git reset HEAD "$i"
git checkout "$i"
done
If you are using Powershell the following will work.
gci -re -in *foo | %{ git reset $_ }
This should work in cygwin and unix env
git reset $(git diff --name-only --cached | grep *.foo)
Simply use git reset *mypattern*
EDIT: Also try git restore, but be VERY careful as it seems to be bugged at the time of writing.
E.g. I want to match all "migrations" in path.
git diff --name-only | grep migrations | xargs git checkout
White space in filename was causing problems using the git diff approaches but the following worked:
find ./ -name "*.foo" -exec git reset {} \;
Execution is verbose if there are many files to be unstaged.
Now git restore is perfectly working, thus for me the easiest has been:
git restore '*.foo'
like in @César Noreña answer.
However, another pretty easy and very flexible way would be:
git diff --name-only --relative | grep '.foo' | xargs git restore
and it is flexible because you can use all grep options, or even replace grep with something else.
If you want to checkout (undo changes) of unstaged modified files matching a given pattern, this works:
macOS:
git checkout $(git st -s | sed -E 's/^.{2}//' | grep '\.foo$')
Unix:
git checkout $(git st -s | sed -r 's/^.{2}//' | grep '\.foo$')
I've only tested this with M modified files. YMMV if you have renamed/deleted/conflicted files as well.