Я неправильно понимаю, как работает git grep --cached foo
? При работе с git версии 1.6.4.4 или 1.6.5.2, git grep --cached foo
возвращает то же самое, что и git grep foo
.
Я думал, что это будет работать как git diff --cached
, ища только изменения в области подготовки. Это то, во что справочная страница заставляет меня поверить:
git diff [--options] --cached [<commit>] [--] [<path>…]
Эта форма предназначена для просмотра изменений, которые вы поставили для следующего коммита относительно именованного <commit>
. Обычно вам требуется сравнение с последним коммитом, поэтому, если вы не введете <commit>
, по умолчанию будет HEAD
. Если HEAD
не существует (, например, , нерожденные ветви) и <commit>
не задано, отображаются все поэтапные изменения. --staged
является синонимом --cached
.
Это просто ошибка, или есть альтернативный / лучший способ найти изменения, которые будут совершены с упоминанием foo?
git diff --cached | grep foo
Приведенная выше команда дает мне половину того, что я хочу, но теряет контекст файла, в котором появляется изменение.
UPDATE
Похоже, у меня ошибка в концепции того, на что смотрит --cached
. Похоже, что он ищет состояние дерева, предполагая, что область размещения применена. Это имеет смысл, теперь, когда я думаю об этом. То, что я хочу искать, это разница, а не полное дерево.
В частности, я хочу знать список всех файлов (меня не волнуют номера строк или контекст), в которые я собираюсь зафиксировать SpecialLog(...)
, чтобы я мог отредактировать эти файлы и удалить SpecialLog
, Так что да, я могу просто сделать git diff --cached
и искать в пейджере SpecialLog
, но затем для огромных изменений в одном файле, есть много дубликатов, и неясно, какой файл я смотрю.