Для поиска содержимого фиксации (т. Е. Фактических строк исходного текста, а не сообщений фиксации и т. П.) Необходимо выполнить:
git grep <regexp> $(git rev-list --all)
git rev-list --all | xargs git grep <expression>
будет работать, если вы столкнетесь с ошибкой «Список аргументов слишком длинный».
Если вы хотите ограничить поиск каким-либо поддеревом (например, «lib / util»), вам нужно будет передать это rev-list
подкоманде, grep
а также:
git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util
Это пролистает весь текст вашего коммита regexp
.
Причина передачи пути в обеих командах состоит в том, что rev-list
вернет список ревизий, в котором lib/util
произошли все изменения , но также вам нужно перейти к нему, grep
чтобы он только выполнял поиск lib/util
.
Просто представьте следующий сценарий: grep
может найти то же самое <regexp>
в других файлах, которые содержатся в той же ревизии, возвращенной rev-list
(даже если в этой ревизии не было изменений в этом файле).
Вот несколько других полезных способов поиска вашего источника:
Найдите в рабочем дереве текст, соответствующий регулярному выражению регулярное выражение:
git grep <regexp>
Найдите в рабочем дереве строки текста, соответствующие регулярному выражению regexp1 или regexp2:
git grep -e <regexp1> [--or] -e <regexp2>
Поиск в рабочем дереве строк текста, соответствующих регулярным выражениям regexp1 и regexp2, только пути к файлам отчетов:
git grep -l -e <regexp1> --and -e <regexp2>
Найдите в рабочем дереве файлы, в которых строки текста соответствуют регулярному выражению regexp1, а строки текста соответствуют регулярному выражению regexp2:
git grep -l --all-match -e <regexp1> -e <regexp2>
Поиск рабочего дерева по измененным строкам соответствия текста:
git diff --unified=0 | grep <pattern>
Поиск всех ревизий для текста, соответствующего регулярному выражению regexp:
git grep <regexp> $(git rev-list --all)
Поиск всех ревизий между rev1 и rev2 для текста, соответствующего регулярному выражению regexp:
git grep <regexp> $(git rev-list <rev1>..<rev2>)
git log -S
и вине) * [Забава с "git log --grep"] [2] (поиск сообщений коммитов ) * [Веселье с "git grep"] [3] [2]: gitster.livejournal.com/30195.html [3]: gitster.livejournal.com/27674.html