НейроАгент

Как фильтровать журнал Git по пользователю: Полное руководство

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

Вопрос

Как можно просмотреть git log, содержащий только коммиты одного пользователя?

При использовании команды git log, как можно отфильтровать вывод по имени пользователя, чтобы отображались только его коммиты?

НейроАгент

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

Содержание

Базовая фильтрация по автору

Простой способ фильтрации журнала git по конкретному пользователю - использование опции --author. Эта опция принимает строку, которая может соответствовать имени или email-адресу автора.

bash
git log --author="John Doe"

Эта команда отобразит только коммиты, сделанные “John Doe”. Опция --author поддерживает частичные совпадения, поэтому вы можете использовать:

bash
git log --author="John"  # Соответствует любому имени автора, содержащему "John"
git log --author="john.doe@example.com"  # Фильтрация по email

Согласно уроку LabEx, опция --author является наиболее прямым методом для фильтрации журналов коммитов по автору и поддерживает как обычный текст, так и шаблоны регулярных выражений.

Продвинутые техники фильтрации по автору

Для более сложной фильтрации Git поддерживает регулярные выражения с опцией --perl-regexp. Это позволяет использовать сложное сопоставление шаблонов и шаблоны исключения.

Использование регулярных выражений

Для сопоставления авторов с использованием шаблонов регулярных выражений:

bash
git log --author="^John" --perl-regexp  # Авторы, имена которых начинаются с "John"
git log --author="Doe$" --perl-regexp   # Авторы, имена которых заканчиваются на "Doe"

Исключение конкретных авторов

Вы можете исключить коммиты конкретных авторов с помощью отрицательных просмотром вперед (negative lookaheads):

bash
git log --author='^(?!Stephen|John).*$' --perl-regexp

Как объясняется в уроке Stephen Charles Weiss, это регулярное выражение соответствует любому имени автора, которое не начинается с “Stephen” или “John”.

Фильтрация по нескольким авторам

Для фильтрации по группе авторов можно объединять шаблоны:

bash
git log --author="John\|Paul\|George\|Ringo"  # Использование оператора ИЛИ

Форматирование и настройка вывода

Опция --pretty=format Git позволяет настраивать отображение информации о коммите. Это особенно полезно при фильтрации по автору для создания чистого и читаемого вывода.

Общие спецификаторы формата

Вот полезные спецификаторы формата для информации, связанной с автором:

  • %an - Имя автора
  • %ae - Email автора
  • %ad - Дата автора
  • %h - Сокращенный хеш коммита
  • %s - Тема (сообщение коммита)
  • %H - Полный хеш коммита

Примеры пользовательских форматов

bash
# Чистый, читаемый формат с автором и датой
git log --author="John Doe" --pretty=format:"%h - %an, %ar : %s"

# Только хеш коммита и имя автора
git log --author="John" --pretty=format:"%h %an"

# С пользовательским форматом даты
git log --author="John" --pretty=format:"%h - %an - %ad" --date=format:"%Y-%m-%d"

Согласно документации Git о форматах pretty, вы можете комбинировать эти спецификаторы для создания практически любого необходимого формата вывода.

Фильтрация по коммиттеру вместо автора

Важно понимать разницу между автором и коммиттером:

  • Автор: Человек, который изначально написал код
  • Коммиттер: Человек, который применил коммит в репозитории

Для фильтрации по коммиттеру вместо автора:

bash
git log --committer="John Doe"

Как отмечено в уроке LabEx, опция --committer работает аналогично --author, но фильтрует на основе того, кто фактически сделал коммит, а не кто написал код.

Комбинирование нескольких фильтров

Вы можете объединить фильтр --author с другими опциями git log для создания более конкретных запросов:

Фильтрация по дате

bash
# Коммиты John Doe за последний год
git log --author="John Doe" --since="1 year ago"

# Коммиты John между конкретными датами
git log --author="John" --since="2023-01-01" --before="2024-01-01"

Фильтрация по содержимому сообщения

bash
# Коммиты John, содержащие конкретный текст в сообщении
git log --author="John" --grep="bugfix"

Комбинирование фильтров автора и сообщения

При использовании нескольких фильтров, похожих на grep, может потребоваться опция --all-match:

bash
git log --author="Hausmann" --grep="p4 depo" --all-match

Как упоминается в Git Reference, опция --all-match гарантирует, что все условия должны быть выполнены.

Фильтрация по конкретным файлам

bash
# Коммиты John, которые изменили определенные файлы
git log --author="John" -- path/to/file.js

Практические примеры

Вот несколько практических примеров, которые могут быть полезны в реальных сценариях разработки:

Пример 1: Чистая история автора

bash
# Показать коммиты John Doe в чистом формате
git log --author="John Doe" --pretty=format:"%C(yellow)%h%Creset %Cgreen%ad%Creset %Cblue%an%Creset: %s" --date=format:"%Y-%m-%d"

Пример 2: Исключение слияний

bash
# Показать неслиянные коммиты John Doe
git log --author="John" --no-merges

Пример 3: Подсчет коммитов по автору

bash
# Подсчитать коммиты John Doe
git log --author="John Doe" --oneline | wc -l

Пример 4: Сложная фильтрация по регулярным выражениям

bash
# Показать коммиты авторов, НЕ названных John или Stephen
git log --perl-regexp --author='^(?!(John|Stephen)).*$'

Пример 5: Фильтрация по автору в стиле GitHub

Как упоминается в ответе на Stack Overflow, вы также можете фильтровать коммиты по автору в веб-интерфейсе GitHub, добавив ?author=github_handle к URL просмотра коммитов.


Источники

  1. Официальная документация Git - git-log
  2. Как фильтровать журналы коммитов Git по автору - LabEx
  3. Фильтрация коммитов Git по автору - Stephen Charles Weiss
  4. Как просматривать журнал коммитов одного пользователя в Git - Stack Overflow
  5. Как просматривать журнал коммитов одного пользователя в Git - GeeksforGeeks
  6. Git Reference - Проверка коммитов
  7. Документация Git о форматах pretty
  8. Фильтрация по имени автора - Adam Dymitruk
  9. Практический Git: Фильтрация истории коммитов с аргументами git log - egghead.io
  10. Git - Просмотр истории коммитов - Pro Git

Заключение

Фильтрация журнала git по пользователю - это мощная техника для понимания индивидуального вклада в кодовую базу. Флаг --author предоставляет гибкие возможности фильтрации, которые можно комбинировать с другими опциями для комплексного анализа. Нужны ли вам простое сопоставление по имени, сложные шаблоны регулярных выражений или пользовательское форматирование вывода, опции фильтрации журнала Git дают вам инструменты для эффективного изучения истории коммитов по конкретным пользователям.

В большинстве случаев начинайте с базовой команды git log --author="Имя" и постепенно добавляйте дополнительные опции фильтрации по мере необходимости. Помните, что экспериментируйте с опцией --pretty=format, чтобы создать вывод, который лучше всего соответствует вашим конкретным требованиям анализа.