Используя git, как я могу искать строку во всех ветвях?


используя git, как я могу искать во всех файлах во всех локальных ветвях для данной строки ?

GitHub specific: можно ли выполнить вышеупомянутый поиск во всех ветвях github ? (На моем удаленном репозитории github есть несколько удаленных ветвей, которые в идеале мне не нужно было бы сбивать для этого поиска..)

6 101

6 ответов:

вы можете сделать это на Git РЕПО:

git grep "string/regexp" $(git rev-list --all)

расширенный поиск Github имеет возможность поиска кода:

поиск кода будет просматривать весь код, публично размещенный на GitHub. Вы также можете фильтровать по:

  • язык: language:
  • имя репозитория (включая имя пользователя):repo:
  • путь к файлу: path:

Если вы используете команду @manojlds git grep и получаете сообщение об ошибке:

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

тогда вы должны использовать xargs:

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

см. Также как grep (поиск) зафиксировал код в истории git?

во многих случаях git rev-list --all может вернуть огромное количество коммитов, которые навсегда сканируются. Если вы вместо поиска по каждой фиксации в каждой ветке в истории вашего репозитория просто хотите найти все советы по ветвям, вы можете заменить его на git show-ref --heads. Итак, в общей сложности:

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

или:

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

Совет: вы можете записать вывод в файл для просмотра в Редакторе.

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

существует несколько проблем с решениями, перечисленными здесь (даже принятыми).

  1. вам не нужно перечислять все хэши, как вы получите дубликаты, также требуется больше времени.

это основывается на этом, где вы можете искать строку "test -f /" на несколько ветвей master и dev как

git grep "test -f /" master dev

что же

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

так вот.

это находит хэши для кончика всех локальных ветвей и ищет только в тех коммитах.

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

Если вам нужно искать в удаленных филиалах тоже Затем добавить -a:

git branch -a -v --no-abbrev | awk -F' *' '{print }' | 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- | xargs git grep "string"

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

вы можете попробовать это

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

Я использую следующую команду, чтобы получить веткой по ее строку

git branch -a | grep "your string"