Git history - найти потерянную строку по ключевому слову - PullRequest
44 голосов
/ 15 мая 2010

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

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

Ответы [ 2 ]

82 голосов
/ 15 мая 2010

Это может быть решено с помощью опции кирка (-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

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

1 голос
/ 15 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...