Используя Git, как я могу найти данную строку во всех файлах во всех локальных ветвях?
Особенность GitHub: возможно ли выполнить вышеуказанный поиск по всем веткам GitHub? (В моем удаленном репозитории GitHub есть несколько удаленных веток, которые в идеале мне не пришлось бы сбрасывать для этого поиска ...)
Ответы:
Вы можете сделать это в репозитории Git:
Расширенный поиск GitHub имеет возможность поиска кода:
Поиск кода просматривает весь код, размещенный на GitHub. Вы также можете фильтровать по:
language:
repo:
path:
источник
git grep ...
. Посмотрите на другие ответы, они намного лучше, чем этот, даже если он помечен как принятый ответ!path:
, потому что в краткой документации не ясно, где применять этот фильтр, предполагая, что он используется перед кавычками в вашем примере запроса?Если вы используете команду @manojlds Git grep и получаете сообщение об ошибке:
тогда вы должны использовать xargs :
Также см. Как получить (найти) зафиксированный код в истории Git.
источник
Во многих случаях
git rev-list --all
может возвращаться огромное количество коммитов, которые можно сканировать вечно. Если вы вместо того, чтобы искать каждый коммит по каждой ветке в своей истории репозитория, просто хотите найти все подсказки по веткам, вы можете заменить их наgit show-ref --heads
. Итак, всего:или:
Совет: вы можете записать вывод в файл для просмотра в редакторе:
источник
git show-ref --heads
перечисляет хеш и имя ссылки, поэтому он (2-я строка) будет искать дважды. такgit show-ref --heads | cut -d' ' -f2
лучше, так как он будет перечислять только имена ссылок.git show-ref --heads -s
выводит только хеш SHA1. Кроме того, если есть несколько веток, указывающих на один и тот же коммит, у вас будут дубликаты. Вы можете удалить ихsort -u
, например,git show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
Есть несколько проблем с решениями, перечисленными здесь (даже приняты).
Вам не нужно перечислять все хэши, так как вы получите дубликаты. Кроме того, это занимает больше времени.
Он основан на этом, где вы можете искать строку
"test -f /"
по нескольким ветвямmaster
иdev
каккоторый так же, как
Так что здесь идет.
Это находит хэши для кончика всех локальных веток и ищет только в тех коммитах:
Если вам нужно искать и в удаленных ветках, добавьте
-a
:Дальше:
источник
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
или это не удастся с->
символом в списке файлов, который обозначает отношение локальных к удаленным ветвямВы можете попробовать это:
источник
git log --all -s"search_string"