Using Git, how could I search for a string across all branches?

git search all branches for file
git grep
git search patch
git log search
git search remote repository
search inside github repository
wildcard in github search
github search code example

Using Git, how could I search within all files in all local branches for a given string?

GitHub specific: is it possible to perform the above search across all GitHub branches? (There are several remote branches on my remote GitHub repository that ideally I wouldn't have to bring down for this search...)

Using Git, how could I search for a string across all branches , The question "How to grep (search) committed code in the git history?" recommends: git grep <regexp> $(git rev-list --all). That searches  git ls-tree might help. To search across all existing branches: The advantage of this is that you can also search with regular expressions for the file name. A few hopefully helpful comments: (a) You probably want to add "-r" to "git ls-tree" so that it'll find the file even if it's in a subdirectory.

If you use @manojlds Git grep command and get an error:

-bash: /usr/bin/git: Argument list too long" 

then you should use xargs:

git rev-list --all | xargs git grep "string/regexp"

Also see How to grep (search) committed code in the Git history

Is it possible to perform a 'grep search' in all the branches of a Git , How do I search for a string in a Git repository? You might want to check out the options on the git log command as well, as it can be used to search across all history rather than just all current branches. For example to search all commit messages for the string "foo bar baz": git log --grep="foo bar baz" If you want to search file contents, you can use the "pickaxe".

In many cases git rev-list --all can return a huge number of commits, taking forever to scan. If you, instead of searching through every commit on every branch in your repository history, just want to search all branch tips, you can replace it with git show-ref --heads. So in total:

git grep "string" `git show-ref --heads`


git show-ref --heads | xargs git grep "string"

Tip: You can write output in file to view in an editor:

nano ~/history.txt
git show-ref --heads | xargs git grep "search string here" >> ~/history.txt

How can I search a word in Git repo over the whole history?, How do I search for a word in a Git repository? So to accomplish that I essentially need a full-text search of ALLLL of the current repo's branches and history. (but if searching through history is a huge lift, searching through the head of all branches would be fully acceptable for the current problem.. history is just a nice-to-have).

There are a few issues with the solutions listed here (even accepted).

You do not need to list all the hashes as you'll get duplicates. Also, it takes more time.

It builds on this where you can search a string "test -f /" on multiple branches master and dev as

git grep "test -f /" master dev

which is same as

printf "master\ndev" | xargs git grep "test -f /"

So here goes.

This finds the hashes for the tip of all local branches and searches only in those commits:

git branch -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"

If you need to search in remote branches too then add -a:

git branch -a -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"


# Search in local branches
git branch | cut -c3- | xargs git grep "string"

# Search in remote branches
git branch -r | cut -c3- | xargs git grep "string"

# Search in all (local and remote) branches
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"

# Search in branches, and tags
git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"

Searching code, How do I find a file in a git repository? git log -p --all -S 'search string' git log -p --all -G 'match regular expression' These log commands list commits that add or remove the given search string/regex, (generally) more recent first. The -p option causes the relevant diff to be shown where the pattern was added or removed, so you can see it in context.

You can try this:

git log -Sxxxx  # Search all commits
git log -Sxxxx  --branches[=<pattern>]   # Search branches

Find A String in a Massive Git Repo - DEV Community ‍ ‍ , We have a massive git repo for an Engauge Analytics project we are for a string title the magic string in one of your many git branches in your repo. on the git log command as well, as it can be used to search across all  Git ships with a command called grep that allows you to easily search through any committed tree, the working directory, or even the index for a string or regular expression. For the examples that follow, we’ll search through the source code for Git itself.

Ability to text-search across all branches (but not necessarily in the , I would like the search to also return hello world's found in all ALSO GitHub does NOT have this feature so this would just be more icing on the me to find all occurrences of a string within all branches of my repository! You can search for code globally across all of GitHub, or search for code within a particular repository or organization. To search for code across all public repositories, you must be signed in to a GitHub account. For more information, see "About searching on GitHub." You can only search code using these code search qualifiers.

Searching, You can search for code on GitHub and narrow the results using these code search qualifiers To search for code across all public repositories, you must be signed in to a GitHub account. Only the default branch is indexed for code search. The Search extensions available for Azure DevOps and TFS enable you to search across all the projects, teams and repositories to which you have access. The Search extensions make it easy to search for information across all your projects, from anywhere and any computer or mobile device, using just a web browser.

Daily Coding Tips №69— search for a string across all branches, By default, git grep will look through the files in your working directory. strings with the --and flag, which ensures that multiple matches must occur in the same  Branches are easily one of the most unique and powerful features that Git has to offer developers. Getting accustomed to frequent use of branching and merging can drastically improve your workflow, and this simple tutorial will give you the basics you need to get started with branches right away.

  • git-grep might be what you're looking for, but I'm not sure yet which options you'd need...
  • Possible duplicate of How to grep (search) committed code in the git history?
  • This causes me a segmentation fault. Might be tortoisegitmerge (Windows), though.
  • This is really not the best way to do this. It doesn't control the amount of git refs that are passed to git grep .... Look to the other answers, they're far better than this one even though it's marked as the accepted answer!
  • it would be great if you can add an example for your filters, e.g. path:, because the documentation at a glance doesnt look clear where to apply this filter, im assuming its before the quotes in your query example?
  • how can I list branch name only. Currently, it list all the hash contains the string.
  • Github search is on master branch only. From "Only the default branch is indexed for code search. In most cases, this will be the master branch."
  • Also, this seems to be more compatible with other kind of consoles like fishshell
  • Thanks!!! using ZSH and this worked while @manojlds command gave the error you mentioned! But warning, this can take VERY long time for a large repo with a long history.
  • git show-ref --heads lists the hash and the ref name so it (2nd line) will search twice. so git show-ref --heads | cut -d' ' -f2 is better as it will only list the ref names.
  • I can't believe how many times this question has been asked and answered, yet you're the only one with the correct answer.
  • git show-ref --heads -s outputs the SHA1 hash only. Also, if there are multiple branches pointing to the same commit, you'll have duplicates. You can remove them with sort -u, like so git show-ref --heads -s | sort -u | xargs git grep ...
  • Here's the function I added to my bashrc. Hope it helps someone: function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
  • This should be the accepted answer. Grepping a string across all branches but for the latest content only is a very common use case.
  • at least for the search in all branches should be: git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string" or it will fail with -> symbol in files list, which denotes local to remote branches relation