Подтвердить что ты не робот

Git искать все разности

Я пытаюсь найти изменения в моей истории git, относящиеся к очень конкретному имени переменной.

Я пробовал сделать это:

git diff HEAD~25000 | grep -in mydistinctvariablename

Результаты не говорят мне, за кого берутся строки результатов, и занимает довольно много времени (около 5-7 минут).

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

4b9b3361

Ответ 1

git log обычно является командой, используемой при анализе истории фиксации. git log --grep может использоваться для поиска регулярных выражений в сообщении фиксации.

То, что вам нужно, это git log -S, который просто ищет текст коммита или git log -G, который ищет его с регулярным выражением:

-S Ищите различия, которые вводят или удаляют экземпляр. Обратите внимание, что это отличается от строки, просто появляющейся на выходе diff; см. запись кирка в gitdiffcore (7) для более подробной информации.

Итак, например, в репозитории msysGit я могу найти коммит, который ввел Tcl 8.5.8, используя либо:

C:\src\msysgit\src>git log --oneline --grep "8\.5\.8"
d938476 Make `NO_SFX=1 portable-release.sh` work
ef1dc94 Update tk to version 8.5.8
a910049 Update tcl to version 8.5.8
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list

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

C:\src\msysgit\src>git log --oneline -S"version=8.5.8"
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list

Ограничение диапазона, которое вы имеете в своем примере, все еще может использоваться здесь для ограничения проверяемых коммитов. Внимательно прочитайте руководство журнала git, чтобы получить представление о том, что он может сделать.

Обратите внимание, что -S просто ищет простые различия в строках - если вы действительно хотите искать контент, используя регулярное выражение, подобное вашему примеру, тогда вы должны использовать опцию -G вместо -S, но это будет значительно медленнее.