Полное руководство по git log: форматы, фильтры и примеры
TL;DR
Кратко: команда git log просматривает историю проекта. Используйте –oneline для быстрого обзора, –graph для визуализации ветвлений, –pretty и –format для кастомного вывода, а фильтры (–since/–until, -

Git хранит историю проекта как одну из своих основных возможностей. Поскольку Git отслеживает все изменения внутри репозитория, он предоставляет очень гибкие возможности для просмотра логов. Команда git log позволяет получить историю в самых разных представлениях — от простого списка коммитов до подробных патчей и отфильтрованных диапазонов.
Important: manual git log занимает более 2 500 строк — но для повседневных задач достаточно набора ключевых опций.
Введение: что показывает git log по умолчанию
По умолчанию git log выводит коммиты в обратном хронологическом порядке. Каждый коммит содержит его хеш, автора, дату и сообщение коммита.
Git использует пейджер (например less или more), чтобы удобно просматривать длинный вывод. Вы можете настроить Git так, чтобы он использовал предпочитаемый пейджер.
Ниже пример реального вывода из исходников Git:
commit 670b81a890388c60b7032a4f5b879f2ece8c4558 (HEAD -> master, origin/next, origin/master, origin/HEAD)
Author: Junio C Hamano
Date: Mon Jun 14 13:23:28 2021 +0900
The second batch
Signed-off-by: Junio C Hamano Первые строки показывают полный хеш (или сокращённый), список ссылок (ветки, теги) и информацию об авторе и дате. Далее идёт сообщение коммита.
Опции git log делятся на две большие группы:
- Форматирование: как отображается каждый коммит.
- Фильтрация: какие коммиты включаются в вывод.
Кроме опций, git log принимает аргументы (файлы, коммиты, ветки, ссылки), которые дополнительно ограничивают результат.
Форматирование вывода git log
Ниже приведены наиболее полезные способы управления форматом.
Короткий вывод: –oneline
Опция –oneline сократит строку до короткого хеша и темы сообщения:
git log --onelineЭто удобно для быстрого обзора, но не даёт даты или автора.
Визуализация ветвления: –graph
–graph рисует простую ASCII-графику ветвлений — полезно для понимания слияний и параллельной работы:
git log --oneline --graph --allСовет: добавьте –all, если хотите увидеть граф по всем веткам, а не только по текущей.
Полная кастомизация: –pretty и –format
–pretty позволяет выбрать предустановленные форматы: short, oneline, fuller и т.д. Примеры:
git log --pretty=short
git log --pretty=oneline
git log --pretty=fullerfuller показывает больше информации — разделяет автора и коммитера:
С помощью варианта format: можно задать шаблон с плейсхолдерами:
- %H — полный хеш
- %h — сокращённый хеш
- %ad — дата автора
- %ar — дата автора, в относительном виде
- %s — тема сообщения
- %b — тело сообщения
- %p — хеши родителей
Пример с цветом и кастомной датой:
git log --pretty=format:'%C(auto) %h [%ad] %s' --date=shortВажно: если вывод будет использоваться в скриптах, продумайте разделители, чтобы надёжно парсить поля.
Показать диффы вместе с логом
Чтобы видеть краткую статистику изменений (количество файлов, вставок, удалений), используйте –shortstat:
git log --shortstatВы увидите строки типа:
1 file changed, 48 insertions(+), 2 deletions(-)Для полного патча (diff) используйте -p:
git log -p-p полезен, когда вам важно увидеть точные строки, которые были добавлены или удалены в каждом коммите.
Фильтрация вывода git log
Форматирование управляет тем, как выглядят записи. Фильтрация управляет тем, какие записи показывать.
Ограничение количества коммитов
Чтобы показать только N последних коммитов, используйте -<число>:
git log -2Можно также использовать –max-count=
Ограничение по дате
–since (синоним: –after) и –until (синоним: –before) принимают даты в ISO 8601 или удобочитаемые относительные выражения:
git log --since="2021-01-01" --until="2021-05-01"Вы можете использовать слова вроде “2 weeks ago” или “yesterday” в большинстве сред.
Ограничение по файлу (путь)
Чтобы увидеть историю изменений конкретного файла, просто укажите путь в конце команды:
git log -- path/to/fileВы получите только коммиты, которые изменяли этот файл.
Сравнение веток: ref1..ref2 и ref1…ref2
Чтобы увидеть разницу между двумя ссылками, используйте синтаксис ref1..ref2 (две точки) и ref1…ref2 (три точки):
- commits в ref2, которых нет в ref1: git log ref1..ref2
- commits в ref1, которых нет в ref2: git log ref2..ref1
- commits, находящиеся либо в ref1, либо в ref2, но не в их общем предке: git log ref1…ref2
Примеры:
git log --oneline origin/branch..origin/main # в origin/main, но не в origin/branch
git log --oneline origin/main..origin/branch # в origin/branch, но не в origin/main
git log --oneline origin/branch...origin/main # только в одной из веток (symdiff)Примечание: порядок ref1..ref2 имеет значение — он показывает, какие коммиты присутствуют в правой ссылке и отсутствуют в левой.
Сравнение тегов
Теги — это тоже ссылки, поэтому тот же синтаксис работает для сравнения релизов:
git log --abbrev-commit --pretty=format:'%h %ar %s' v2.32.0-rc3..v2.32.0Связанные команды
- git shortlog — собирает коммиты по авторам, удобно для заметок о релизе:
git shortlog v2.32.0-rc3..v2.32.0- git show — показывает подробности конкретного объекта (коммит, тег и т.д.), разделяет опции с git log.
Когда git log не помогает (ограничения и подводные камни)
- История перезаписана (rebase, filter-branch, git filter-repo): если была изменена история, старые хеши исчезают и их нельзя увидеть обычным git log.
- Большие бинарные файлы: diff-патчи по бинарным файлам не дадут полезной информации.
- Метаданные CI/мердж-коммитов: автоматические коммиты могут загромождать лог — используйте фильтры по автору или по сообщению для их исключения.
Important: Если вам нужно аудитное логирование (кто и когда что-то изменил в удалённом репозитории), помните, что локальные действия по переписыванию истории нарушают такой аудит.
Практическая шпаргалка: команды и шаблоны
Часто используемые комбинации:
- Короткий, читаемый список всех веток с графом:
git log --graph --oneline --decorate --all- Вывести полный дифф для последнего коммита:
git log -p -1
# или
git show- Поиск коммитов с определённой фразой в сообщении:
git log --grep="фикс бага" --i- Показать коммиты, изменившие конкретную функцию (через путь):
git log -S"имя_функции" -- path/to/file- Список коммитов между двумя тегами в кратком формате:
git log --abbrev-commit --pretty=format:'%h %ar %s' v1.2.0..v1.3.0- Вывод в формате, удобном для парсинга (таб-разделитель):
git log --pretty=format:"%h\t%an\t%ad\t%s" --date=isoДиаграмма принятия решения (Mermaid)
flowchart TD
A[Что вы хотите посмотреть?]
A -->|Быстрый обзор| B[--oneline]
A -->|Ветвление| C[--graph]
A -->|Патчи| D[-p]
A -->|Статистика| E[--shortstat]
A -->|Определённый файл| F[path/to/file]
A -->|Диапазон| G[ref1..ref2 или --since/--until]
B --> H[Добавить --decorate/--all]
C --> H
D --> I[Ограничить количеством -n]Чек-листы по ролям
Разработчик:
- Перед пушем проверьте: git log –oneline –graph -n 10
- Убедитесь, что коммиты содержат понятные темы.
- При необходимости соберите изменения в один логичный коммит (squash) перед публикацией в общий репозиторий.
Код-ревьюер:
- git log -p origin/main..origin/feature — проверьте патчи
- git shortlog для сводки авторов
- Используйте –stat и –name-only, чтобы видеть затронутые файлы
Релиз-менеджер:
- git log –pretty=format:’%h %an %ad %s’ vX.Y.Z-rc..vX.Y.Z для заметок релиза
- Сверьте список авторов через git shortlog
Отладка и тест-кейсы
- Если не видите ожидаемый коммит: проверьте, не находится ли он в другой ветке (git fetch; git branch -a).
- Если потеряны коммиты после rebase: проверьте reflog (git reflog) — иногда объекты ещё доступны.
- Для скриптов: тестируйте форматирование на репозитории с разнообразными данными (ко многим авторам, с merge-коммитами, с бинарными файлами).
Критерии приёмки:
- Вывод git log должен содержать нужный набор коммитов при заданных фильтрах.
- Скрипт, парсящий git log, корректно обрабатывает пустые поля и специальные символы в сообщениях.
Краткий глоссарий (1 строка каждый)
- Коммит: зафиксированное состояние изменений с метаданными.
- Хеш: уникальный идентификатор коммита (SHA-1/SHA-256 в будущем).
- HEAD: указатель на текущую ветку/коммит.
- ref: ссылка, например branch или tag.
Альтернативы и связки
- tig — интерактивный текстовый интерфейс для просмотра логов и патчей.
- gitk — графический браузер истории (X11).
- GitHub/GitLab Web UI — удобен для обзора и кросс-ссылок, но локальные инструменты быстрее при скриптинге.
Когда использовать альтернативу: если вам нужно интерактивно просмотреть длинный патч или делать поиск по diff, tig или gitk удобнее.
Безопасность и приватность
- Локальный git log отражает историю, доступную в вашем репозитории. Если история переписана и затем force-push, аудит может быть нарушен.
- Не публикуйте в коммитах секреты (пароли, токены); git log сохраняет их навсегда до очистки истории.
Итог и рекомендации
git log — очень гибкий инструмент: начинайте с простых опций (–oneline, –graph) и постепенно добавляйте форматирование и фильтры. Для автоматизации выберите стабильный формат вывода (–pretty=format: с явными разделителями). Для подготовки заметок о релизе используйте git shortlog и форматированный git log между тегами.
Summary:
- git log даёт полную историю проекта; освоение нескольких опций существенно ускорит анализ.
- Используйте фильтры по дате, количеству и по файлу, чтобы найти нужный набор коммитов.
- Для автоматизации выбирайте форматы с предсказуемыми разделителями.
Short announcement (100–200 слов):
git log — незаменимый инструмент для изучения истории репозитория. В этом руководстве показано, как быстро получать обзор последних коммитов (–oneline), визуализировать ветвление (–graph), формировать читаемый и машинно-удобный вывод (–pretty/–format) и фильтровать историю по дате, количеству и пути. Включены практические примеры команд, шпаргалка, диаграмма принятия решений и чек-листы для разработчиков, ревьюеров и релиз-менеджеров. Если вам нужно готовить заметки к релизу или разбирать конфликтную историю, сочетание git log и git shortlog, а также инструментов вроде tig или gitk, поможет сделать анализ быстрым и надёжным.
Похожие материалы
Восстановление системного образа Windows
Управление разделами и томами в Windows 10
UFW — настройка брандмауэра в Linux
Диаграммы в Google Docs: быстро и просто
Как импортировать плейлисты в Spotify