Как можно просмотреть git log, содержащий только коммиты одного пользователя?
При использовании команды git log, как можно отфильтровать вывод по имени пользователя, чтобы отображались только его коммиты?
Вы можете просматривать журнал коммитов только одного пользователя, используя флаг --author с командой git log. Эта опция позволяет отфильтровать историю коммитов, чтобы отображать только коммиты, сделанные конкретным автором, и поддерживает частичные совпадения и регулярные выражения для гибкой фильтрации.
Содержание
- Базовая фильтрация по автору
- Продвинутые техники фильтрации по автору
- Форматирование и настройка вывода
- Фильтрация по коммиттеру вместо автора
- Комбинирование нескольких фильтров
- Практические примеры
Базовая фильтрация по автору
Простой способ фильтрации журнала git по конкретному пользователю - использование опции --author. Эта опция принимает строку, которая может соответствовать имени или email-адресу автора.
git log --author="John Doe"
Эта команда отобразит только коммиты, сделанные “John Doe”. Опция --author поддерживает частичные совпадения, поэтому вы можете использовать:
git log --author="John" # Соответствует любому имени автора, содержащему "John"
git log --author="john.doe@example.com" # Фильтрация по email
Согласно уроку LabEx, опция --author является наиболее прямым методом для фильтрации журналов коммитов по автору и поддерживает как обычный текст, так и шаблоны регулярных выражений.
Продвинутые техники фильтрации по автору
Для более сложной фильтрации Git поддерживает регулярные выражения с опцией --perl-regexp. Это позволяет использовать сложное сопоставление шаблонов и шаблоны исключения.
Использование регулярных выражений
Для сопоставления авторов с использованием шаблонов регулярных выражений:
git log --author="^John" --perl-regexp # Авторы, имена которых начинаются с "John"
git log --author="Doe$" --perl-regexp # Авторы, имена которых заканчиваются на "Doe"
Исключение конкретных авторов
Вы можете исключить коммиты конкретных авторов с помощью отрицательных просмотром вперед (negative lookaheads):
git log --author='^(?!Stephen|John).*$' --perl-regexp
Как объясняется в уроке Stephen Charles Weiss, это регулярное выражение соответствует любому имени автора, которое не начинается с “Stephen” или “John”.
Фильтрация по нескольким авторам
Для фильтрации по группе авторов можно объединять шаблоны:
git log --author="John\|Paul\|George\|Ringo" # Использование оператора ИЛИ
Форматирование и настройка вывода
Опция --pretty=format Git позволяет настраивать отображение информации о коммите. Это особенно полезно при фильтрации по автору для создания чистого и читаемого вывода.
Общие спецификаторы формата
Вот полезные спецификаторы формата для информации, связанной с автором:
%an- Имя автора%ae- Email автора%ad- Дата автора%h- Сокращенный хеш коммита%s- Тема (сообщение коммита)%H- Полный хеш коммита
Примеры пользовательских форматов
# Чистый, читаемый формат с автором и датой
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, вы можете комбинировать эти спецификаторы для создания практически любого необходимого формата вывода.
Фильтрация по коммиттеру вместо автора
Важно понимать разницу между автором и коммиттером:
- Автор: Человек, который изначально написал код
- Коммиттер: Человек, который применил коммит в репозитории
Для фильтрации по коммиттеру вместо автора:
git log --committer="John Doe"
Как отмечено в уроке LabEx, опция --committer работает аналогично --author, но фильтрует на основе того, кто фактически сделал коммит, а не кто написал код.
Комбинирование нескольких фильтров
Вы можете объединить фильтр --author с другими опциями git log для создания более конкретных запросов:
Фильтрация по дате
# Коммиты John Doe за последний год
git log --author="John Doe" --since="1 year ago"
# Коммиты John между конкретными датами
git log --author="John" --since="2023-01-01" --before="2024-01-01"
Фильтрация по содержимому сообщения
# Коммиты John, содержащие конкретный текст в сообщении
git log --author="John" --grep="bugfix"
Комбинирование фильтров автора и сообщения
При использовании нескольких фильтров, похожих на grep, может потребоваться опция --all-match:
git log --author="Hausmann" --grep="p4 depo" --all-match
Как упоминается в Git Reference, опция --all-match гарантирует, что все условия должны быть выполнены.
Фильтрация по конкретным файлам
# Коммиты John, которые изменили определенные файлы
git log --author="John" -- path/to/file.js
Практические примеры
Вот несколько практических примеров, которые могут быть полезны в реальных сценариях разработки:
Пример 1: Чистая история автора
# Показать коммиты 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: Исключение слияний
# Показать неслиянные коммиты John Doe
git log --author="John" --no-merges
Пример 3: Подсчет коммитов по автору
# Подсчитать коммиты John Doe
git log --author="John Doe" --oneline | wc -l
Пример 4: Сложная фильтрация по регулярным выражениям
# Показать коммиты авторов, НЕ названных John или Stephen
git log --perl-regexp --author='^(?!(John|Stephen)).*$'
Пример 5: Фильтрация по автору в стиле GitHub
Как упоминается в ответе на Stack Overflow, вы также можете фильтровать коммиты по автору в веб-интерфейсе GitHub, добавив ?author=github_handle к URL просмотра коммитов.
Источники
- Официальная документация Git - git-log
- Как фильтровать журналы коммитов Git по автору - LabEx
- Фильтрация коммитов Git по автору - Stephen Charles Weiss
- Как просматривать журнал коммитов одного пользователя в Git - Stack Overflow
- Как просматривать журнал коммитов одного пользователя в Git - GeeksforGeeks
- Git Reference - Проверка коммитов
- Документация Git о форматах pretty
- Фильтрация по имени автора - Adam Dymitruk
- Практический Git: Фильтрация истории коммитов с аргументами git log - egghead.io
- Git - Просмотр истории коммитов - Pro Git
Заключение
Фильтрация журнала git по пользователю - это мощная техника для понимания индивидуального вклада в кодовую базу. Флаг --author предоставляет гибкие возможности фильтрации, которые можно комбинировать с другими опциями для комплексного анализа. Нужны ли вам простое сопоставление по имени, сложные шаблоны регулярных выражений или пользовательское форматирование вывода, опции фильтрации журнала Git дают вам инструменты для эффективного изучения истории коммитов по конкретным пользователям.
В большинстве случаев начинайте с базовой команды git log --author="Имя" и постепенно добавляйте дополнительные опции фильтрации по мере необходимости. Помните, что экспериментируйте с опцией --pretty=format, чтобы создать вывод, который лучше всего соответствует вашим конкретным требованиям анализа.