Фильтрация по автору в Git - git log --author

17 декабря 2025
Автор

Олег Марков

Введение

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

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

Что именно делает git log --author

Автор и коммитер в Git — в чем разница

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

  • author (автор) — тот, кто фактически написал изменения
  • committer (коммитер) — тот, кто записал изменения в репозиторий (выполнил коммит или, например, применил патч / сделал rebase)

При обычной работе через git commit автор и коммитер совпадают. Но в сценариях с git cherry-pick, git rebase, git am и при применении чужих патчей коммитер может отличаться.

Параметр --author у git log фильтрует коммиты по полю Author, а не по полю Committer.

Давайте посмотрим простой пример:

git log -1
# commit a1b2c3d4e5f6...
# Author: Ivan Petrov <ivan@example.com>      # Поле Author
# Date:   Tue Nov 21 10:15:30 2023 +0300      # Дата создания изменений
#
#     Fix user profile page
#
# commit a7b8c9d0e1f2...
# Committer: Admin Bot <ci@example.com>       # Поле Committer (можно увидеть с форматированием)

Если вы выполните:

git log --author="Ivan"

вы получите коммиты, у которых в поле Author есть совпадение со строкой Ivan, независимо от того, кто указан в поле Committer.

Базовое использование git log --author

Поиск коммитов по имени автора

Начнем с самого частого сценария: у вас есть имя (или часть имени), и нужно увидеть все коммиты этого разработчика.

git log --author="Ivan Petrov"
  • Git отфильтрует все коммиты, где строка Author содержит подстроку Ivan Petrov
  • Поиск нечувствителен к регистру (по умолчанию --author использует регулярное выражение с опцией i)

Если вы не уверены в точном написании имени, можно ограничиться частью:

git log --author="ivan"

Git найдет всех, чье имя или email содержит ivan (например, Ivan Petrov, ivan.petrov, dev-ivan@company.com).

Поиск по email автора

Параметр --author ищет совпадения и в имени, и в email, потому что строка автора выглядит так:

Author: Ivan Petrov <ivan.petrov@example.com>

Поэтому вы можете фильтровать по почте:

git log --author="ivan.petrov@example.com"

или даже по домену:

git log --author="@example.com"

В этом случае вы увидите коммиты всех авторов, чья почта оканчивается на @example.com.

Просмотр только хэшей коммитов конкретного автора

Иногда вам нужен не полный лог, а список хэшей — например, для передачи в другие команды.

git log --author="Ivan Petrov" --pretty=format:"%h"
# %h - сокращенный хэш коммита

Комментарии к примеру:

git log \
  --author="Ivan Petrov"          # Фильтруем только коммиты Ивана
  --pretty=format:"%h %ad %s"     # Настраиваем вывод - хэш дата сообщение
  --date=short                    # Дата в коротком формате ГГГГ-ММ-ДД

Так вы получите удобный список вида:

a1b2c3d 2023-11-21 Fix user profile page
f9e8d7c 2023-11-19 Add validation to login form
...

Фильтрация по нескольким авторам и использование регулярных выражений

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

Параметр --author принимает регулярное выражение (PCRE), а не просто строку. Это значит, что вы можете гибко описывать шаблоны поиска.

Простой пример: найти всех авторов, у которых имя начинается на Ivan:

git log --author="^Ivan"
  • ^ — начало строки
  • Git найдет Ivan Petrov, Ivan Sidorov, но не SuperIvan.

Или наоборот — найти всех, у кого в имени есть Petrov:

git log --author="Petrov"

Поскольку поиск нечувствителен к регистру, не нужно отдельно учитывать PETROV или petrov.

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

Вы можете объединить несколько имен через | (оператор ИЛИ в регулярных выражениях):

git log --author="Ivan Petrov|Petr Ivanov"

В этом примере вы увидите коммиты, где автор — либо Ivan Petrov, либо Petr Ivanov.

Еще вариант — искать сразу несколько email-доменов:

git log --author="@company.com|@outsourcing.com"

Так вы выявите коммиты внутренних и внешних разработчиков.

Поиск с учетом границ слова

Если вам важно, чтобы поиск сработал по полному слову, а не по части, используйте \b (граница слова):

git log --author="\bIvan\b"

Комментарии:

git log \
  --author="\bIvan\b"    # Ищем слово Ivan целиком
  --oneline              # Краткий формат - только хэш и сообщение

Но обратите внимание: иногда в имени или email могут быть символы, которые ломают ожидания от \b, поэтому при сложных кейсах проверяйте шаблон постепенно.

Экранирование специальных символов

Если в имени или email есть специальные символы для regexp (например, +, ?, ., (, )), вам нужно их экранировать с помощью \.

Например, email dev+ci@example.com. Чтобы искать по нему, напишите:

git log --author="dev\+ci@example\.com"

Комментарии к шаблону:

  • + — экранируем плюс
  • . — экранируем точку в домене

Без экранирования точка . означала бы «любой символ», а + — «один или более предыдущих символов».

Комбинирование --author с другими параметрами git log

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

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

Если вы хотите посмотреть коммиты конкретного автора за определенный период, используйте --since и --until.

git log \
  --author="Ivan Petrov" \
  --since="2023-11-01" \
  --until="2023-11-30"

Комментарии:

  • --since — начиная с указанной даты
  • --until — до указанной даты (включительно)
  • Даты можно задавать гибко, например "2 weeks ago", "yesterday", "2023-11-01 10:00".

Еще пример — за последние 7 дней:

git log --author="Ivan" --since="7 days ago"

Фильтрация по автору и файлам

Иногда нужно узнать, какие изменения конкретный разработчик внес в определенный файл или директорию. Для этого используйте путь после --:

git log --author="Ivan" -- path/to/file.go

Комментарии:

  • -- отделяет список опций от списка файлов/путей
  • path/to/file.go — путь к файлу или каталогу, по которому будет ограничен лог.

Еще пример — все изменения Ивана в папке internal/user:

git log --author="Ivan" -- internal/user

Git покажет только те коммиты, где автор — Иван и где изменялись файлы внутри internal/user.

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

По умолчанию git log показывает историю для текущей ветки. Если нужно явно указать ветку:

git log feature/new-api --author="Ivan"

Комментарии:

  • feature/new-api — имя ветки, для которой вы смотрите лог
  • Далее добавляем --author, чтобы сузить список по автору.

Также можно искать коммиты автора в нескольких ветках или в диапазоне:

git log master..feature/new-api --author="Ivan"

Здесь:

  • master..feature/new-api — все коммиты, которые есть в feature/new-api, но отсутствуют в master
  • Плюс фильтрация по автору.

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

Если вы хотите найти конкретные изменения, которые делал определенный автор, полезно комбинировать --author с --grep (поиск по сообщению коммита).

git log \
  --author="Ivan" \
  --grep="bug" \
  --grep="critical" \
  --all-match

Комментарии:

  • --grep="bug" и --grep="critical" — два условия по сообщению
  • --all-match требует, чтобы оба шаблона в --grep совпали одновременно
  • В итоге останутся коммиты Ивана, в сообщении которых есть и слово bug, и слово critical.

Если --all-match не использовать, будет логика «Иван и (bug или critical)».

Краткий формат вывода с фильтрацией по автору

Чтобы получить компактный список, удобно использовать --oneline:

git log --author="Ivan" --oneline

или с сортировкой по времени:

git log --author="Ivan" --oneline --decorate --graph

Комментарии к опциям:

  • --oneline — сокращенный хэш + первая строка сообщения
  • --decorate — показывает метки веток и тегов
  • --graph — рисует ASCII-граф веток.

Это удобно, когда вы хотите визуально оценить вклад конкретного автора.

Отличия --author и --committer

Когда использовать --committer вместо --author

Иногда изменения пишет один человек, а в репозиторий их записывает другой (например, через git am или CI-систему). Тогда поле Author будет одним, а Committer — другим.

Чтобы фильтровать по коммитеру, есть параметр --committer:

git log --committer="CI Bot"

Комментарии:

  • Вы увидите коммиты, которые попали в репозиторий через бота CI, merge-бота или человека, который применяет патчи
  • Но автором (Author) там могут быть разные разработчики.

Примеры различий на практике

Допустим, вы приняли патч по почте и применили его через git am:

# Здесь вы применяете патч от автора
git am patch.mbox

Автором в коммите будет тот, кто прислал патч, а коммитером — вы.

Теперь:

git log --author="Petrov"

покажет все патчи, которые написал Петров (даже если применяли их вы), а

git log --committer="Ivan"

покажет все коммиты, которые вы записали в репозиторий, независимо от того, кто их написал.

Это важно понимать, когда вы анализируете историю:
--author — про «кто написал изменения»,
--committer — про «кто их зафиксировал в репозитории».

Просмотр статистики по автору

Подсчет количества коммитов автора

Чтобы просто узнать, сколько коммитов сделал конкретный автор, можно использовать --oneline и wc -l (в Unix-подобных системах):

git log --author="Ivan" --oneline | wc -l
# Эта команда выведет количество строк - то есть количество коммитов

Комментарии:

  • git log --oneline — один коммит в строку
  • wc -l — посчитать количество строк.

Использование git shortlog

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

Пример статистики по всем авторам:

git shortlog -s -n
# -s - выводить только количество коммитов
# -n - сортировать по количеству

Если нужно ограничить путь (например, вас интересует файлы в backend/), используйте:

git shortlog -s -n -- backend/

Хотя здесь мы не используем --author, результат покажет вклад всех авторов. Если хотите увидеть только одного автора, используйте grep:

git shortlog -s -n | grep "Ivan"
# Вывод будет примерно таким:
#  42  Ivan Petrov

Комментарии:

  • shortlog суммирует коммиты по авторам
  • grep "Ivan" оставляет только строки, где фигурирует Иван.

Статистика по изменениям (строкам кода) автора

Чтобы увидеть, сколько строк добавил и удалил конкретный автор, можно скомбинировать --author и --shortstat:

git log --author="Ivan" --shortstat

--shortstat выведет краткую статистику по каждому коммиту: количество файлов, вставок и удалений.

Если вам нужна сумма по всем коммитам, можно использовать дополнительную обработку (через awk или git diff --author с --stat), но это уже выходит за базовый уровень.

Поиск конкретных изменений конкретного автора

Поиск по коду с учетом автора (git log -S / -G)

Иногда нужно ответить на вопрос: «Кто впервые добавил эту строку в код?» или «Кто менял конкретный фрагмент?». Здесь помогут опции -S и -G у git log. Их можно комбинировать с --author.

  • -S<string> — поиск по добавлению/удалению точной строки
  • -G<regex> — поиск по паттерну (регулярному выражению) в изменяемых строках

Пример: найти все коммиты Ивана, в которых он трогал строку IsUserActive:

git log --author="Ivan" -S "IsUserActive" -- path/to/file.go

Комментарии:

  • -S "IsUserActive" — будут найдены коммиты, где эта строка была добавлена или удалена
  • --author="Ivan" — ограничим поиск только коммитами Ивана
  • -- path/to/file.go — только в указанном файле.

Пример с регулярным выражением:

git log --author="Ivan" -G "Validate.*Email" -- path/to/file.go

Здесь будут найдены коммиты Ивана, где он менял строки, соответствующие шаблону Validate...Email.

Поиск по файловому пути и по автору

Если вы знаете, что нужные изменения лежат в конкретной директории, сразу ограничьте путь:

git log --author="Ivan" -- src/auth

или несколько путей:

git log --author="Ivan" -- src/auth src/user

Комментарии:

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

Настройка вывода для удобного анализа по авторам

Пользовательский формат вывода с указанием автора

Чтобы при фильтрации по авторам видеть сразу email, дату и сообщение, используйте --pretty=format.

git log --author="Ivan" --pretty=format:"%h | %an <%ae> | %ad | %s" --date=short

Расшифровка плейсхолдеров:

  • %h — сокращенный хэш
  • %an — имя автора (Author Name)
  • %ae — email автора (Author Email)
  • %ad — дата автора (Author Date)
  • %s — сообщение коммита (subject)

Комментарии:

git log \
  --author="Ivan" \
  --pretty=format:"%h %an %ae %ad %s" \
  --date=short
# Так вы получите читабельный лог - удобно копировать в отчеты

Скрытие merge-коммитов автора

Иногда merge-коммиты только «шумят» в истории. Чтобы исключить их, добавьте --no-merges:

git log --author="Ivan" --no-merges

Комментарии:

  • Вы увидите только обычные (non-merge) коммиты
  • Это помогает оценить именно «чистые» изменения автора, без технических слияний веток.

Показать только первые N коммитов автора

Если история длинная, ограничьте вывод:

git log --author="Ivan" -n 10

Комментарии:

  • -n 10 — максимум 10 коммитов
  • Удобно, если вы ищете что-то «из недавнего», а не за всю историю.

Типичные сценарии использования git log --author

Подготовка к коду-ревью

Ситуация: вы мержите ветку feature/payments и хотите быстро просмотреть только изменения конкретного разработчика, чтобы проверить их внимательнее.

git log master..feature/payments --author="Ivan" --oneline

Комментарии:

  • Сначала мы берем разницу веток master и feature/payments
  • Потом фильтруем по автору
  • --oneline делает список компактным для обзора.

Далее можно брать хэши из этого списка и смотреть детали через git show.

Разбор инцидента и поиск ответственного коммита

Допустим, в сервисе появилась ошибка в модуле авторизации. Вы знаете, что за модуль в основном отвечает Иван. Начните анализ так:

git log --author="Ivan" -- src/auth

Затем найдите последние коммиты и изучите их:

git show a1b2c3d
# Здесь вы увидите diff и комментарии автора

Подготовка статистики по вкладу разработчика

Если руководителю или коллеге нужно показать вклад конкретного разработчика, можно:

  1. Посчитать количество коммитов:

    git log --author="Ivan" --since="2023-01-01" --oneline | wc -l
    
  2. Посмотреть области, где он работал:

    git log --author="Ivan" --name-only --since="2023-01-01"
    # --name-only - после каждого коммита выводит список измененных файлов
    
  3. При необходимости собрать вывод в отдельный файл:

    git log --author="Ivan" --since="2023-01-01" --name-status > ivan_changes_2023.txt
    # --name-status - показывает статусы файлов - добавлен изменен удален
    

Отладка проблем с неправильными именами и email

Иногда разработчики настраивают Git не сразу, и в истории появляются «плавающие» имена и адреса, вроде user, User, ivan, Ivan Petrov. Вам может понадобиться собрать все такие варианты:

git log --author="ivan" --oneline
git log --author="petrov" --oneline
git log --author="user" --oneline

А затем уже принимать решение о переписывании истории через git filter-repo или git filter-branch (это более сложная тема).

Важный момент: --author помогает вначале понять масштаб проблемы, посмотрев, где и как автор фигурировал с разными вариантами имени и email.

Заключение

Параметр --author у git log — один из самых полезных инструментов для анализа истории коммитов. Он позволяет:

  • быстро найти все изменения конкретного разработчика;
  • сузить поиск до нужной ветки, периода, файла или директории;
  • комбинировать фильтрацию с поиском по сообщениям (--grep) и содержимому (-S, -G);
  • отличать «кто написал» (--author) от «кто записал в репозиторий» (--committer);
  • строить простую статистику по вкладу автора.

Используя git log --author в сочетании с форматированием вывода, ограничением по датам и путям, вы можете очень точно отвечать на вопросы «кто и когда сделал это изменение» даже в больших проектах.

Ниже — несколько вопросов, которые часто возникают, когда разработчики начинают глубже использовать фильтрацию по автору.

Частозадаваемые технические вопросы и ответы

Как искать по точному совпадению имени автора а не по подстроке

По умолчанию --author использует регулярное выражение, поэтому Ivan совпадет и с SuperIvan. Чтобы максимально приблизиться к точному совпадению, добавьте якоря начала и конца строки:

git log --author="^Ivan Petrov <ivan@example.com>$"

Здесь вы явно указываете полную строку автора. Ее проще всего взять из вывода обычного git log -1 и скопировать строку Author, экранировав при необходимости спецсимволы.

Как отфильтровать все коммиты кроме одного автора

Напрямую сделать отрицание в --author нельзя, но можно использовать grep -v поверх вывода:

git log --pretty=format:"%h %an %s" | grep -vi -E "Ivan Petrov"

Комментарии:

  • grep -v — исключить все строки, где найден шаблон
  • -i — игнорировать регистр
  • -E — расширенные регулярные выражения.

Если нужно при этом сохранить структурированный вывод (git show и т.п.), проще сначала получить список нужных хэшей через скрипт или алиас.

Как использовать git log --author на Windows без проблем с кавычками

На Windows командная строка по-другому обрабатывает кавычки. Если команда с двойными кавычками работает некорректно, попробуйте:

git log --author=Ivan

или в PowerShell:

git log --author 'Ivan Petrov'

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

Как посмотреть только первые и последние коммиты автора в репозитории

Чтобы увидеть самый ранний коммит автора:

git log --author="Ivan" --reverse -n 1

Комментарии:

  • --reverse — инвертирует порядок (от старых к новым)
  • -n 1 — берем первый после инверсии, то есть самый ранний.

Чтобы увидеть самый свежий коммит автора:

git log --author="Ivan" -n 1

Здесь не нужно --reverse — по умолчанию лог идет от новых к старым.

Как вывести diff только для коммитов конкретного автора

Если вы хотите посмотреть сразу все изменения кода, сделанные автором, добавьте -p:

git log --author="Ivan" -p

Комментарии:

  • -p — показывает патчи (diff) для каждого коммита
  • Можно дополнительно ограничивать по файлам или датам, чтобы объем diff был разумным:
git log --author="Ivan" --since="2023-11-01" -p -- src/auth
Стрелочка влевоГрафический просмотр истории в Git - git log --graph

Постройте личный план изучения Git до уровня Middle — бесплатно!

Git — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Git

Открыть базу знаний

Лучшие курсы по теме

изображение курса

Основы Git

Антон Ларичев
AI-тренажеры
Гарантия
Бонусы
иконка звёздочки рейтинга4.9
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

TypeScript с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.8
3 999 ₽ 6 990 ₽
Подробнее
изображение курса

Next.js - с нуля

Антон Ларичев
AI-тренажеры
Практика в студии
Гарантия
Бонусы
иконка звёздочки рейтинга4.7
3 999 ₽ 6 990 ₽
Подробнее

Отправить комментарий