Ответ 1
Это можно решить с помощью опции pickaxe (-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
), найдите ветки, содержащие commit:
git branch -a --contains 8beeff00d
(Я ссылаюсь на последнюю команду в Как перечислить ветки, содержащие заданную фиксацию?")