Git history - найти потерянную строку по ключевому слову

Где-то в моем Git-репозитории была строка, содержащая слово "Foo" пару сотен коммитов раньше.

Есть ли способ найти номер ревизии, где он был в последний раз, не покупая FishEye?

2 ответа

Решение

Это может быть решено киркой (-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:

С тех пор вы можете сделать (из Edward Anderson):

git log -p --all -S 'search string'
git log -p --all -G 'match regular expression'

Эти комманды журнала регистрируют коммиты, которые добавляют или удаляют заданную строку поиска / регулярное выражение, (обычно) более новые в первую очередь.
-p (--patch), параметр отображает соответствующий diff, где шаблон был добавлен или удален, так что вы можете увидеть его в контексте.

Найдя соответствующий коммит, который добавляет текст, который вы искали (например, 8beeff00d), найдите ветки, содержащие коммит:

git branch -a --contains 8beeff00d

(Я ссылаюсь на эту последнюю команду в " Как перечислить ветви, которые содержат данный коммит? ")

В худшем случае используйте git bisect а также grep?

Другие вопросы по тегам