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!
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.
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.
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.
In a Git GUI application like SmartGit I would filter the displayed files by the pattern *.foo
, press Ctrl+A to select all the filtered files and invoke the Unstage command.
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.