1

I want to search across all possible refs (commits/branches/tags), all commit messages, all branch names, and all commit contents.

Devin Rhode
  • 23,026
  • 8
  • 58
  • 72
  • A useful preliminary step is first clone all remote branches: https://stackoverflow.com/a/68582362/565877 – Devin Rhode Feb 20 '22 at 23:12
  • 2
    Not in one command, but with an alias to chain commands, yes. But I guess this would be out of your question scope? – Romain Valeri Feb 21 '22 at 03:04
  • 1
    I don't really mind what the implementation is, just want to easily search everything stored in git. In fact, I fully expect this is necessary, given the request to search _ev_er_ry_thing_ – Devin Rhode Feb 21 '22 at 15:02
  • How does what you want differ from searching through `git log -p --all`? – jthill Jun 02 '22 at 17:45
  • `git log -p --all` is a totally valid strategy for doing this search! See below answer :) – Devin Rhode Jun 02 '22 at 21:14

2 Answers2

3

Since noone suggested a chain of commands yet, and in case you did not craft it yourself already :

git config alias.findall '!f() { echo -e "\nFound in refs:\n"; git for-each-ref refs/ | grep $1; echo -e "\nFound in commit messages:\n"; git log --all --oneline --grep="$1"; echo -e "\nFound in commit contents:\n"; git log --all --oneline -S "$1"; }; f'

It chains these three commands :

# for branches and tags we use for-each-ref and pipe the result to grep
git for-each-ref refs/ | grep $1

# for commit messages we use the grep option for log
git log --all --oneline --grep="$1"

# and for commit contents, the log command has the -S option
git log --all --oneline -S "$1"

So now you can just do

git findall something
Romain Valeri
  • 19,645
  • 3
  • 36
  • 61
-1

You can try printing everything to the terminal, and then searching output with your terminal application:

git log -5000 -p --all --decorate --oneline --graph

For performance reasons, this is limited to 5,000 commits.

sample output from command

There's a bit more noise/information than originally requested, but this can be beneficial - for example, you can now search commit hashes, timestamps, author names. You can intuitively search for deleted files, etc.

You could include --oneline if performance is an issue. It causes author and date information to be omitted:

diff of oneline

Devin Rhode
  • 23,026
  • 8
  • 58
  • 72
Fuad Zein
  • 230
  • 1
  • 9
  • 1
    You have not understood the question. Neither original nor useful in this context. – matt Feb 21 '22 at 02:32
  • I just realized this is not completely off-base, but missing some CRUCIAL points tying it back to original question. I've edited this answer to connect back to the original request in my question. – Devin Rhode Feb 24 '22 at 17:05
  • It would be really nifty to pipe this output into some sort of search tool, but my command line skills are not there yet – Devin Rhode Feb 24 '22 at 17:06