Reputation: 991
I have looked, searched, and read documentation and can't really find anything about this.
Basically, I want to be able to do this:
git reset -- *.exe
or
git reset -- */some_executable.exe
Instead of this:
git reset -- some/very/long/path/some_executable.exe
Also it'd be nice to be able to do this:
git reset -- topleveldirectory/another/subdirectory/*
Instead of this:
git reset -- topleveldirectory/another/subdirectory/SomeFile.cpp
git reset -- topleveldirectory/another/subdirectory/SomFile.h
I think I can use the wildcard *
in git-add to add files, but haven't found anything that works in the case above.
Any suggestions or pointers to where I can look for more info?
Using: git version 1.7.3.1.msysgit.0 on 64-bit Windows 7
Upvotes: 38
Views: 36104
Reputation: 3917
In addition to the practical answers already provided, here are the reference docs for what you can and cannot do in git pathspecs. The wildcards *
feature is called "glob magic", in git-terminology.
https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefpathspecapathspec
Note that your shell (bash / powershell/ …) also supports globbing. This is similar to, but distinct from, git's "glob magic".
Upvotes: 0
Reputation: 1683
To reset all exe files recursively from within a git folder, you can do the following:
git reset -- \*.exe
Or if you would like to add all java files within a specific sub-folder you can do that too, like this:
git add ./some/sub/folder/path/**/*.java
where ** means all folders recursively from this point in the path
Upvotes: 20
Reputation: 7307
In some cases however, one does need to use wildcards in a specific way to target a specific subset of files and not just all files, especially when working with git rm
, or git checkout
or git reset
. You can achieve the same by simply escaping the wild card character.
git rm app/assets/javascript/templates/projects/\*.jst.ejs
Upvotes: 10
Reputation: 80041
At least in the case of subfolders/subfiles, there is no need for a wildcard.
git add .
...adds the current directory (.) and everything under it. The same goes for...
git add files/
...which would add ./files
, ./files/foo.txt
, and ./files/foo/bar.txt
.
Upvotes: 4
Reputation: 7474
Git does support some pathspec globbing, but you need to be careful to shell-escape the characters so they aren't interpreted by in your case, msys bash, which doesn't support more sophisticated wildcard expansion.
EDIT: Also, for your reset example, you can just pass the directory as an argument to git reset and git will operate recursively.
git reset my/long/path
rather than
git reset my/long/path/*
Upvotes: 22