В репозитории Git-кода я хочу перечислить все коммиты, которые содержат определенное слово. Я пробовал это
git log -p | grep --context=4 "word"
но это не обязательно возвращает мне имя файла (если оно не менее 5 строк от слова, которое я искал. Я также пытался
git grep "word"
но это дает мне только настоящие файлы, а не историю.
Как найти всю историю, чтобы отслеживать изменения в определенном слове? Я намерен искать в моей кодовой базе вхождения слова, чтобы отследить изменения (поиск в истории файлов).
Ответы:
Если вы хотите найти все коммиты, в которых сообщение коммита содержит данное слово, используйте
Если вы хотите найти все коммиты, в которых «слово» было добавлено или удалено в содержимом файла (а точнее: где изменилось число вхождений «слова»), то есть поиск по содержимому коммита , используйте так называемый поиск «кирки» с
В современном git есть также
искать различия, чья добавленная или удаленная строка соответствует «слову» (также фиксирует содержимое ).
Обратите внимание, что
-G
по умолчанию принимает регулярное выражение, в то время как-S
принимает строку, но может быть изменено, чтобы принимать регулярные выражения, используя--pickaxe-regex
.С Git 2.25.1 (февраль 2020) документация проясняется вокруг этих регулярных выражений.
См. Коммит 9299f84 (06 февраля 2020 г.) Мартина Агрена (``) .
(Объединено с Junio C Hamano -
gitster
- в фиксации 0d11410 , 12 Feb 2020)git diff
Документация теперь включает в себя:источник
-S<string>
Ищите различия, которые вводят или удаляют экземпляр <string>.-G<string>
Ищите различия, чья добавленная или удаленная строка соответствует данному <регулярному выражению>.-S<string>
быстрее, потому что он только проверяет,<string>
изменилось ли количество вхождений , в то время как-G<string>
поиск добавляет и удаляет строки в каждом коммите diff.git log --grep="my words"
,.--grep
отличается от-S
и-G
. Вы можете указать строку для каждого из этих аргументов.git log
кирка найдет коммиты с изменениями, включая "слово" сgit log -Sword
источник
После долгих экспериментов я могу порекомендовать следующее, которое показывает коммиты, которые вводят или удаляют строки, содержащие заданное регулярное выражение, и отображает изменения текста в каждом, а цвета показывают слова, добавляемые и удаляемые.
Требуется время, чтобы бежать, хотя ... ;-)
источник
GIT_PAGER=cat
либо добавьте ее| cat
git log --pickaxe-regex -p --color-words -S "<regexp to search for>" <file or fiepath>
Вы можете попробовать следующую команду:
или используя
grep
следующим образом:Запустите эту команду в родительском каталоге, где вы хотите искать.
источник
git log --patch --color=always | less +/searching_string
.Еще один способ / синтаксис сделать это:
git log -S "word"
например, вы можете искать, например,
git log -S "with whitespaces and stuff @/#ü !"
источник
vim-fugitive универсален для такого рода исследований в Vim.
Используйте
:Ggrep
для этого. Для получения дополнительной информации вы можете установить vim-fugitive и посмотреть турориал:help Grep
. И этот эпизод: исследование хранилища-истории-git-репозитория поможет вам сделать все это.источник
Чтобы использовать логический соединитель для регулярного выражения:
Это регулярное выражение для поиска регулярного выражения [0-9] * или [az] * в сообщениях фиксации.
источник
Если вы хотите найти конфиденциальные данные, чтобы удалить их из своей истории мерзавцев (именно поэтому я и попал сюда), для этого есть инструменты. Github в качестве специальной страницы справки по этому вопросу .
Вот суть статьи:
источник