Это может быть решено с помощью опции кирка (-S
) gitlog
git log -SFoo -- path_containing_change
(вы даже можете добавить диапазон времени: --since=2009.1.1 --until=2010.1.1
)
-S<string>
Ищите различия, которые вводят или удаляют экземпляр <string>
.
Обратите внимание, что это отличается от строки, просто появляющейся в выводе diff; см. запись кирки в gitdiffcore (7) для получения более подробной информации.
diffcore-pickaxe
Это преобразование используется для поиска пар файлов, которые представляют изменения, которые касаются указанной строки.
Когда используется diffcore-pickaxe
, он проверяет, существуют ли пары файлов, у которых «исходная» сторона имеет указанную строку, а чья сторона «результата» - нет.
Такая файловая пара представляет собой «строку, появившуюся в этом наборе изменений».
Он также проверяет противоположный случай, когда теряется указанная строка.
Обновление 2014:
С тех пор вы можете сделать (из nilbus * ответ ):
git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'
В этом списке команд журнала фиксируются коммиты, которые добавляют или удаляют заданную строку поиска / регулярное выражение, (как правило) более ранние сначала.
Параметр -p
(--patch
) позволяет отображать соответствующий diff, где шаблон был добавлен или удален, так что вы можете увидеть его в контексте.
Найдя соответствующий коммит, который добавляет искомый текст (например, 8beeff00d
), найдите ветки, содержащие коммит:
git branch -a --contains 8beeff00d
(я ссылаюсь на эту последнюю команду в " Как вывести список ветвей, содержащих данный коммит? ")