Фильтрация коммитов

Фильтрация коммитов#

В предыдущем разделе мы научились управлять форматом вывода git log. Теперь же посмотрим, как фильтровать коммиты, оставляя только те из них, что нам представляют интерес. Для этого мы научимся:

  • расширять количество выводимых коммитов опцией --all команды git log;

  • исключить из вывода коммиты, достижимые из заданного;

  • задавать диапазон коммитов для вывода;

  • отображать только первые несколько коммитов;

  • фильтровать коммиты по автору, коммитеру, дате, ключевому слову в сообщении и изменения, затронутому файлу.

Несмотря на то, что вывод git log протяженный, она не показывает все коммиты, а только те, что достижимы из текущей ветки. Чтобы команда отобразила все коммиты, ей передают опцию --all. Чтобы показать только коммиты конкретной ветки, ее имя передают в виде аргумента. Вместо имени ветки может быть любое обозначение, которое указывает на коммит: имя тега и идентификатор коммита. И при этом их может быть несколько. Соответственно, будут показаны те коммиты, которые достижимы из переданных.

С другой стороны, подставляя символ ^ перед ссылкой на коммит, мы, наоборот, отбрасываем достижимые коммиты из вывода. Где мы можем воспользоваться этим? Например, посмотрим только те коммиты, которые еще не отправлены в публичное хранилище. Они размещаются между указателем на вершину ветки HEAD и удаленной веткой origin/master.

git log HEAD ^origin/master

Тот же самый вариант команды можно достичь, используя синтаксис с двумя точками, который проще для понимания: git log origin/master..HEAD. Если предполагается, что верхний диапазон совпадет с началом ветки, то его можно и не указывать: git log origin/master...

Давайте посмотрим, что нас ожидает в следующей версии CMake. Просмотрим все теги и увидим, что тег с последней версией – это v3.28.3. Команда git log --oneline v3.28.3.. покажет внесенные правки в следующую версию CMake, пока не доступные в официальном хранилище.

Показ последних нескольких коммитов (напримре, трех): git log -3

Поиск по автору: git log --author="имя автора" git log --committer="имя коммитера"

Поиск по времени опциями --after и --before.

Поиск по ключевому слову в сообщении коммита: git log --grep="ключевое слово"

Поиск по ключевому слову в изменениях: git log -S="ключевое слово".

Вывод коммитов, затронувших заданный файл: git log -- путь/к/файлу.

Фильтрация коммитов и отображение форматом вывода команды git log часто применяют совместно. Если мы ищем коммиты по автору, нас не интересует вывод поля о нем.