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
(Я ссылаюсь на эту последнюю команду в " Как перечислить ветви, которые содержат данный коммит? ")