git grep - кэшированный - PullRequest
       10

git grep - кэшированный

5 голосов
/ 17 ноября 2009

Я неправильно понимаю, как работает 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, но затем для огромных изменений в одном файле, есть много дубликатов, и неясно, какой файл я смотрю.

1 Ответ

9 голосов
/ 17 ноября 2009
$ git init
Initialized empty Git repository in /tmp/foo/.git/
$ echo hi there >file
$ git add file
$ git commit -m 'added file'
[master (root-commit) dc08993] added file
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file
$ echo hi again >>file
$ git grep again
file:hi again
$ git grep --cached again
$

Время проходит ...

$ git add file
$ git grep --cached again
file:hi again

Чтобы ограничить область поиска содержимым следующего коммита, git diff направляет вывод в $PAGER. Предполагая, что вы установили свой пейджер на less, git diff --cached показывает результаты поиска в контексте.

Поиск в индексе файлов с изменениями, в которых упоминается специальная строка, как в следующем примере:

$ echo SpecialLog >file2
$ git add file2
$ git diff-index --cached --name-only HEAD
file
file2
$ git diff-index --cached -SSpecialLog --name-only HEAD
file2
$ git diff --cached -SSpecialLog --name-only
file2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...