Фильтрация коммитов#
В предыдущем разделе мы научились управлять форматом вывода 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 часто применяют совместно.
Если мы ищем коммиты по автору, нас не интересует вывод поля о нем.