У меня была где-нибудь в моем репозитории Мерзавца строка, содержащая слово "Foo" пара сотен фиксаций прежде.
Если существует какой-либо способ найти его число пересмотра, где это был прошлый раз, не покупая FishEye?
Это можно решить с помощью опции pickaxe (-S
) в gitlog
git log -SFoo -- path_containing_change
(можно даже добавить временной диапазон: --since=2009.1.1 --until=2010.1.1
)
-S<string>
Ищите различия, которые вводят или удаляют экземпляр
<строка>
.
Обратите внимание, что это отличается от простого появления строки в выводе diff; подробнее см. запись pickaxe в gitdiffcore(7).
diffcore-pickaxe
Это преобразование используется для поиска пар файлов, представляющих изменения, которые касаются указанной строки.
Когда используетсяdiffcore-pickaxe
, он проверяет, существуют ли пары файлов, "исходная" сторона которых содержит указанную строку, а "результирующая" - нет.
Такая пара файлов представляет собой "строку, появившуюся в этом наборе изменений".
Также проверяется обратный случай, в котором указанная строка отсутствует.
Обновление 2014:
С тех пор вы можете сделать (из nilbus's answer):
git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'
Эти команды журнала перечисляют коммиты, которые добавляют или удаляют заданную строку поиска/регекс, (обычно) сначала более поздние.
Опция-p
(--patch
) заставляет показать соответствующий diff, где шаблон был добавлен или удалён, так что вы можете увидеть его в контексте.Найдя соответствующий коммит, добавляющий искомый текст (например,
8beeff00d
), найдите ветви, содержащие этот коммит:
git branch -a --contains 8beeff00d
(я ссылаюсь на последнюю команду в статье "How to list branches that contain a given commit?")