Гид по технологиям

Полное руководство по git log: форматы, фильтры и примеры

7 min read GIT Обновлено 22 Dec 2025
Руководство по git log — форматы и фильтры
Руководство по git log — форматы и фильтры

TL;DR

Кратко: команда git log просматривает историю проекта. Используйте –oneline для быстрого обзора, –graph для визуализации ветвлений, –pretty и –format для кастомного вывода, а фильтры (–since/–until, -, ref1..ref2, путь к файлу) — для выбора нужного набора коммитов. Внизу — шпаргалка, чек-листы для ролей, диаграмма принятия решения и краткий глоссарий.

Фотография толстой книги, вид с торца

Git хранит историю проекта как одну из своих основных возможностей. Поскольку Git отслеживает все изменения внутри репозитория, он предоставляет очень гибкие возможности для просмотра логов. Команда git log позволяет получить историю в самых разных представлениях — от простого списка коммитов до подробных патчей и отфильтрованных диапазонов.

Important: manual git log занимает более 2 500 строк — но для повседневных задач достаточно набора ключевых опций.

Введение: что показывает git log по умолчанию

По умолчанию 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

Скриншот терминала с выводом 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=fuller

fuller показывает больше информации — разделяет автора и коммитера:

Скриншот терминала с git log --pretty=fuller

С помощью варианта format: можно задать шаблон с плейсхолдерами:

  • %H — полный хеш
  • %h — сокращённый хеш
  • %ad — дата автора
  • %ar — дата автора, в относительном виде
  • %s — тема сообщения
  • %b — тело сообщения
  • %p — хеши родителей

Пример с цветом и кастомной датой:

git log --pretty=format:'%C(auto) %h [%ad] %s' --date=short

Скриншот терминала с git log --pretty=format

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

Показать диффы вместе с логом

Чтобы видеть краткую статистику изменений (количество файлов, вставок, удалений), используйте –shortstat:

git log --shortstat

Вы увидите строки типа:

1 file changed, 48 insertions(+), 2 deletions(-)

Для полного патча (diff) используйте -p:

git log -p

-p полезен, когда вам важно увидеть точные строки, которые были добавлены или удалены в каждом коммите.

Фильтрация вывода git log

Форматирование управляет тем, как выглядят записи. Фильтрация управляет тем, какие записи показывать.

Ограничение количества коммитов

Чтобы показать только N последних коммитов, используйте -<число>:

git log -2

Скриншот терминала с 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 log для тегов

Связанные команды

  • git shortlog — собирает коммиты по авторам, удобно для заметок о релизе:
git shortlog v2.32.0-rc3..v2.32.0

Скриншот терминала с выводом git shortlog

  • 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, поможет сделать анализ быстрым и надёжным.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Восстановление системного образа Windows
Резервное копирование

Восстановление системного образа Windows

Управление разделами и томами в Windows 10
Windows

Управление разделами и томами в Windows 10

UFW — настройка брандмауэра в Linux
Системное администрирование

UFW — настройка брандмауэра в Linux

Диаграммы в Google Docs: быстро и просто
Google Docs

Диаграммы в Google Docs: быстро и просто

Как импортировать плейлисты в Spotify
Музыка

Как импортировать плейлисты в Spotify

Как изменить иконки на Mac
Mac

Как изменить иконки на Mac