Используя git, как я могу искать строку во всех ветвях?
Используя git, как я могу искать во всех файлах во всех локальных ветвях для данной строки?
Специфика Github: возможно ли выполнить вышеуказанный поиск по всем ветвям github? (На моем удаленном реестре github есть несколько удаленных веток, которые идеально мне не пришлось бы сбивать для этого поиска..)
Ответы
Ответ 1
Вы можете сделать это в репозитории Git:
git grep "string/regexp" $(git rev-list --all)
Расширенный поиск Github имеет возможность поиска кода:
Поиск кода будет просматривать весь код, публично размещенный в GitHub. Вы также можете фильтровать:
- язык:
language:
- имя репозитория (включая имя пользователя):
repo:
- путь к файлу:
path:
Ответ 2
Если вы используете команду @manojlds git grep и получите сообщение об ошибке:
-bash: /usr/bin/git: Argument list too long"
то вы должны использовать xargs:
git rev-list --all | xargs git grep "string/regexp"
Также см. Как выполнить grep (поиск) кода в истории git?
Ответ 3
Во многих случаях 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
Ответ 4
Есть несколько проблем с решениями, перечисленными здесь (даже приняты).
- Вам не нужно перечислять все хэши, так как вы получите дубликаты, также это займет больше времени.
Это основано на этом, где вы можете искать строку "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 $3}' | xargs git grep "string/regexp"
Если вам нужно искать и в удаленных ветках, добавьте -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"
Ответ 5
Вы можете попробовать это
git log -Sxxxx #search all commits
git log -Sxxxx --branches[=<pattern>] #search branches
Ответ 6
Я использую следующую команду, чтобы получить ветку по ее строке
git branch -a | grep "your string"