Поиск по сайту:

Как искать среди последних изменений Git Commit


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

Использование журнала Git

К сожалению, такие сайты, как GitHub, не предлагают эту функцию, поэтому вам придется использовать git log. У этой команды много параметров, в том числе возможность поиска различий коммитов, но работать с выводом немного громоздко.

В любом случае интерактивный пейджер в Git многим кажется неуклюжим, поэтому мы рекомендуем либо искать в командной строке с помощью /Search, либо направлять вывод непосредственно на консоль с помощью | cat или в файл с > log.txt, где его можно искать более эффективно.

Выполнение такого поиска по всему репозиторию, вероятно, приведет к очень большому результату. Скорее всего, вы захотите увидеть коммиты в заданном временном диапазоне, что можно сделать с помощью --after и --before, которые принимают даты, а также относительные даты, такие как «2 неделя» и «3 месяца». Следующая команда игнорирует коммиты старше полутора месяцев, а также игнорирует самые последние коммиты.

git log --after="6 week" --before="1 week"

Если вы просто хотите узнать, какие коммиты содержат заданную строку поиска, вы можете использовать -S, что требует, чтобы вы поместили строку поиска сразу после нее без пробелов.

git log --after="6 week" -S'Dictionary' --stat

Если вы хотите просмотреть файлы с этим выводом, вы можете использовать флаг -p :

git log --after="6 week" -S'Dictionary' --stat -p | cat

Однако эти выходные данные массивны для любого большого запроса и мало чем отличаются от простого открытия в вашей среде IDE. Чтобы решить эту проблему, нам нужно использовать grep и sed, а это означает, что команды, к сожалению, усложнятся.

Использование sed для более умного сопоставления

Чтобы сопоставить и напечатать фактические строки в файле, вам нужно использовать grep, перенаправляя выходные данные в него, чтобы напечатать строки, в которых он нашел шаблон. Это требует, чтобы вы напечатали шаблон дважды:

git log --after="6 week" -S'Dictionary' --stat -p | grep 'Dictionary'

Однако у этого есть проблема — он больше не включает сообщения фиксации или идентификаторы. Чтобы исправить это, нам нужно разбить sed:

SEARCH=Dictionary && git log --after="6 week" -S$SEARCH --stat -p | sed -n "/commit/,/diff/p; /$SEARCH/p"

Эта команда устанавливает переменную SEARCH, так как вводить поисковый запрос дважды неудобно. Он запускает git log --stat -p, который выводит полный вывод, но передает его в sed для синтаксического анализа. sed соответствует всем строкам между commit и diff, которые получают выходные данные заголовка --stat. Затем он добавляет совпавшую строку, создавая реальный полезный вывод.

Возможно, вместо этого используйте Git Blame

Приведенные выше примеры хорошо подходят для поиска по всей кодовой базе. Но если вы знаете, какой файл был затронут, и вместо этого просто хотите понять его историю, вы можете использовать git fault.

Git-blame распечатает весь файл, но аннотирует каждую строку с именем человека, который последним изменил его. Это позволит вам быстро отслеживать изменения и во многих случаях возлагать вину на ваших коллег.

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

Обратите внимание, что вы также можете просмотреть хронологическую историю файла из того же интерфейса; Git fault сводит все это к одному результату.