Краткая история репозитория в Git с помощью git log --oneline

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

Олег Марков

Введение

Когда репозиторий растет, история коммитов становится все более громоздкой и сложной. Полный вывод git log с автором, датой, хешем и сообщением быстро превращается в «простыню», в которой трудно ориентироваться.

Команда git log --oneline решает эту проблему: она показывает историю в сильно сжатом виде, оставляя только самое важное — укороченный хеш коммита и его сообщение. Смотрите, я покажу вам, как с помощью этой простой опции можно:

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

Давайте разберемся, как устроена git log --oneline, какие есть полезные сочетания с другими опциями и как применять их в повседневной работе.

Что такое git log --oneline и чем оно отличается от обычного git log

Стандартный вывод git log

Если вы просто запускаете:

git log

то, скорее всего, видите примерно такой вывод:

commit 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0
Author: Ivan Petrov <ivan@example.com>
Date:   Mon Nov 25 12:34:56 2024 +0300

    Implement user authentication flow

commit 0f9e8d7c6b5a4n3m2l1k0j9i8h7g6f5e4d3c2b1
Author: Ivan Petrov <ivan@example.com>
Date:   Sun Nov 24 18:10:20 2024 +0300

    Fix database connection leak

Такой формат подробный, но для быстрого обзора он перегружен.

Что делает опция --oneline

Теперь давайте запустим:

git log --oneline

Результат будет выглядеть намного компактнее:

a1b2c3d Implement user authentication flow
0f9e8d7 Fix database connection leak

Что изменилось:

  • хеш коммита стал коротким (обычно 7 символов);
  • осталась только одна строка на коммит;
  • вывод стал лучше читаться «по диагонали».

Фактически --oneline — это сокращение для комбинации опций:

git log --pretty=oneline --abbrev-commit
  • --pretty=oneline — один коммит в одну строку;
  • --abbrev-commit — сокращает хеш до привычных 7-10 символов.

Вы можете проверить это сами:

git log --pretty=oneline

и

git log --oneline

Сравните, как видите, разница будет только в длине хеша.

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

Просмотр последних коммитов

Начнем с самого частого сценария: быстро посмотреть, что происходило в репозитории недавно.

git log --oneline

Этот вывод может быть очень длинным, если репозиторий живет давно. Чтобы ограничить количество строк, добавьте -n:

git log --oneline -5
# или эквивалент
git log -5 --oneline

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

git log --oneline -5
# --oneline - компактный формат вывода истории
# -5         - показать только 5 последних коммитов

Так вы сразу видите «краткую историю» изменений, без лишней информации.

История для конкретного файла или директории

Часто нужно понять, как менялся один конкретный файл. Давайте посмотрим, как это сделать:

git log --oneline path/to/file.go

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

git log --oneline path/to/file.go
# --oneline        - компактная история
# path/to/file.go  - фильтр по файлу, показывает только коммиты,
#                    в которых этот файл изменялся

То же самое работает для директории:

git log --oneline src/

Так вы получите краткую историю изменений именно в этой части проекта.

История по диапазону коммитов

Иногда нужно посмотреть изменения между двумя точками истории. Например, между двумя тэгами:

git log --oneline v1.0.0..v1.1.0

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

git log --oneline v1.0.0..v1.1.0
# v1.0.0..v1.1.0 - диапазон от v1.0.0 (НЕ включительно)
#                  до v1.1.0 (включительно)

Или между текущей веткой и другой:

git log --oneline main..feature/login

Так вы получите список коммитов, которые есть в feature/login, но отсутствуют в main.

Наглядная история веток git log --oneline --graph

Зачем нужен режим --graph

git log --oneline показывает линейный список коммитов. Но ветки в Git — это дерево, где есть ответвления и слияния. Чтобы это увидеть, есть режим --graph.

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

git log --oneline --graph

Пример вывода:

*   8f1a2b3 Merge branch 'feature/payments'
|\
| * 3c4d5e6 Add payment service
| * 1a2b3c4 Add payment model
* | 7d8e9f0 Fix user profile bug
|/
* 0f1e2d3 Initial commit

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

  • * — отдельный коммит;
  • | — вертикальная линия ветки;
  • ` и /` — места разветвления и слияния;
  • ветки визуально расходятся и сходятся.

Так вы сразу видите:

  • где создавалась ветка;
  • какие коммиты относятся к этой ветке;
  • где она была слита с основной.

Рекомендованная «удобная» команда для повседневной работы

На практике многие разработчики привыкают к такой команде:

git log --oneline --graph --decorate --all

Разберем, что здесь происходит:

  • --oneline — компактный формат;
  • --graph — текстовая диаграмма веток;
  • --decorate — добавляет названия веток и тегов;
  • --all — показывает историю не только текущей ветки, а всех веток.

Теперь вы увидите примерно такой вывод:

* 5a6b7c8 (HEAD -> feature/login) Add login page UI
* 3d4e5f6 Implement login API
| * 7a8b9c0 (origin/main, main) Merge branch 'feature/profile'
|/  
* 1a2b3c4 Initial commit

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

  • (HEAD -> feature/login) — вы сейчас на ветке feature/login;
  • (origin/main, main) — локальная ветка main и удаленная origin/main указывают на один и тот же коммит.

Смотрите, этот режим отлично подходит, чтобы быстро понять, «где вы находитесь» в истории, какие ветки есть и как они связаны.

Фильтрация истории с --oneline

С git log можно очень гибко фильтровать историю. В комбинации с --oneline это превращается в удобный поисковый инструмент.

Фильтр по автору

Если нужно увидеть только свои коммиты:

git log --oneline --author="Ваше Имя"

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

git log --oneline --author="Ivan"
# --author       - фильтр по имени или email автора
# "Ivan"         - подстрока, которая ищется в поле автора

Можно использовать часть имени или email.

Фильтр по времени

Давайте посмотрим, как отфильтровать коммиты по датам:

git log --oneline --since="2024-11-01"

или диапазон:

git log --oneline --since="2024-11-01" --until="2024-11-30"

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

git log --oneline --since="2 weeks ago"
# --since        - коммиты не старше указанной даты
# "2 weeks ago"  - допускается человекочитаемый формат

Git понимает форматы вроде:

  • yesterday
  • 2 days ago
  • 3 weeks ago
  • 2024-11-01

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

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

git log --oneline --grep="login"

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

git log --oneline --grep="login"
# --grep      - поиск по сообщению коммита
# "login"     - подстрока, регистр чувствителен по умолчанию

Если вы хотите игнорировать регистр:

git log --oneline --grep="login" -i

Комбинация фильтров

Все фильтры можно совмещать. Например, все ваши коммиты за последнюю неделю, связанные с login:

git log --oneline --author="Ivan" --since="1 week ago" --grep="login"

Так вы получаете очень точную, но компактную выборку.

Управление количеством и диапазоном коммитов

Ограничение по количеству: -n

Мы уже коротко использовали -5. Давайте обобщим:

git log --oneline -3

Показывает три последних коммита. Это удобно, когда вы просто хотите быстро проверить, что сделали недавно.

Можно использовать и полный вариант:

git log --oneline --max-count=3

Отдельные диапазоны: HEAD~N и HEAD..BRANCH

В Git удобно ссылаться на коммиты относительно HEAD.

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

git log --oneline HEAD~5..HEAD

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

git log --oneline HEAD~5..HEAD
# HEAD         - текущий коммит
# HEAD~5       - коммит на 5 шагов назад от текущего
# HEAD~5..HEAD - диапазон от HEAD~5 (НЕ включительно)
#                до HEAD (включительно)

Так вы увидите последние 5 коммитов, даже если их набралось больше за короткое время.

Другой полезный вариант — различия между ветками:

git log --oneline main..feature/login

Это список коммитов, которые есть в feature/login, но которых нет в main. Очень удобно перед слиянием, чтобы понять, что именно вы собираетесь «привнести» в основную ветку.

Как читать укороченные хеши и использовать их

Почему хватает 7 символов

Когда вы видите в выводе git log --oneline что-то вроде:

a1b2c3d Fix login bug

это не полный хеш, а сокращенный. Полный SHA-1 выглядит так:

a1b2c3d4e5f67890123456789abcdef012345678

Git использует столько символов, сколько достаточно, чтобы однозначно отличить этот коммит от других в репозитории. Обычно 7 хватает с большим запасом.

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

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

git show a1b2c3d

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

git show a1b2c3d
# a1b2c3d - сокращенный хеш коммита,
#          Git сам найдет полное совпадение

То же самое для git checkout:

git checkout a1b2c3d

И для создания ветки:

git branch hotfix/login a1b2c3d

Давайте разберем пример пошагово:

git log --oneline -5
# 9f8e7d6 Fix logout redirect
# a1b2c3d Fix login bug
# ...

git checkout -b hotfix/login a1b2c3d
# -b hotfix/login - создаем новую ветку с этим именем
# a1b2c3d         - указываем, от какого коммита ее создать

Так вы опираетесь на краткую историю и быстро возвращаетесь к нужной точке.

Настройка формата oneline под себя

Свой pretty-формат вместо стандартного oneline

Если вам хочется чуть больше информации, чем дает стандартный --oneline, вы можете задать свой формат. Давайте посмотрим пример:

git log --pretty=format:"%h %ad %an %s" --date=short

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

git log --pretty=format:"%h %ad %an %s" --date=short
# %h  - сокращенный хеш
# %ad - дата коммита (формат зависит от --date)
# %an - имя автора
# %s  - сообщение коммита
# --date=short - формат даты YYYY-MM-DD

Пример вывода:

a1b2c3d 2024-11-25 Ivan Petrov Implement login feature
0f9e8d7 2024-11-24 Ivan Petrov Fix DB connection leak

Смотрите, здесь вы получаете компактность, но при этом видите дату и автора.

Создание алиаса, чтобы не печатать длинные команды

Чтобы не набирать длинную комбинацию опций каждый раз, удобно создать алиас (псевдоним) в Git:

git config --global alias.lg "log --oneline --graph --decorate --all"

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

git config --global alias.lg "log --oneline --graph --decorate --all"
# alias.lg       - добавляет новую команду `git lg`
# "log ..."      - реальная команда, которую она будет вызывать
# --global        - сохраняет настройку для всех репозиториев на этой машине

Теперь вы можете просто писать:

git lg

и сразу получать удобный, наглядный вывод всей истории.

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

git config --global alias.lg1 "log --pretty=format:'%h %ad %an %s' --date=short"

Теперь команда:

git lg1

будет давать компактную историю с датой и автором.

Практические сценарии использования git log --oneline

Проверка перед push

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

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

git log --oneline origin/main..HEAD

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

git log --oneline origin/main..HEAD
# origin/main..HEAD - коммиты, которые есть у вас локально
#                     в текущей ветке, но которых нет на origin/main

Так вы видите только новые локальные коммиты. Удобно проверить сообщения и последовательность.

Анализ чужой ветки перед merge

Если вам прислали ветку feature/payments и вы хотите оценить объем изменений:

git log --oneline main..feature/payments

или с графом:

git log --oneline --graph main..feature/payments

Здесь вы четко видите, какие коммиты появятся в main после слияния.

Поиск «сломавшего» коммита по сообщениям

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

git log --oneline --grep="cache"

Если хотите искать и по файлам, можно комбинировать:

git log --oneline --grep="cache" src/cache/

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

git log --oneline --grep="cache" src/cache/
# --grep="cache" - искать "cache" в сообщениях коммитов
# src/cache/     - при этом ограничиться коммитами, где менялись файлы в этой директории

Вы быстро находите потенциально подозрительные изменения.

Быстрая навигация по релизам через теги

Если вы помечаете релизы тегами (v1.0.0, v1.1.0 и так далее), удобно смотреть историю между ними:

git log --oneline v1.0.0..v1.2.0

Или в обратном порядке (от старых к новым):

git log --oneline v1.0.0..v1.2.0 --reverse

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

git log --oneline v1.0.0..v1.2.0 --reverse
# --reverse - инвертировать порядок вывода, показать от старых к новым

Так вы видите краткую историю того, что вошло в конкретный релиз.

Дополнительные полезные опции рядом с --oneline

Показывать изменения вместе с историей: -p или --stat

Иногда вам недостаточно просто списка коммитов, вы хотите сразу видеть, какие строки менялись. Это уже выходит за рамки чистого «oneline», но для полноты давайте посмотрим.

Можно комбинировать:

git log --oneline -3 -p

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

git log --oneline -3 -p
# -3   - ограничиваемся тремя последними коммитами
# -p   - показываем патч (изменения по строкам) для каждого коммита

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

Более компактный вариант — --stat:

git log --oneline -5 --stat

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

Игнорирование merge-коммитов

Если в истории много слияний, иногда хочется их спрятать и посмотреть только «чистые» изменения. Для этого есть опция --no-merges:

git log --oneline --no-merges

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

git log --oneline --no-merges
# --no-merges - скрыть merge-коммиты, показывать только обычные

Это особенно удобно при просмотре короткой истории, чтобы ее не «засоряли» синхронизационные слияния.

Типичные ошибки и нюансы использования git log --oneline

Ожидание «полной истории» там, где вы уже сделали фильтр

Иногда разработчики удивляются, что какие-то коммиты «пропали» из вывода. Чаще всего причина в том, что был применен фильтр:

  • диапазон (A..B);
  • указание файла;
  • фильтр по автору или дате.

Проверьте себя:

  • Запустите просто git log --oneline без дополнительных аргументов.
  • Потом постепенно добавляйте фильтры и смотрите, как меняется вывод.

Так вы явно поймете, какой фильтр убирает нужные вам коммиты.

Непонимание разницы между HEAD..BRANCH и BRANCH..HEAD

Диапазоны A..B в Git часто путают. Короткое правило:

  • A..B — коммиты, которые есть в B, но нет в A.

Давайте разберем на примере:

git log --oneline main..feature/login

Значит «коммиты, которые есть в feature/login, но которых нет в main».

Если вы поменяете порядок:

git log --oneline feature/login..main

Вы увидите «коммиты, которые есть в main, но отсутствуют в feature/login».

Обратите внимание на порядок точек, он действительно важен.

Слишком длинные сообщения портят компактность вывода

--oneline эффективен, когда сообщения коммитов краткие и по делу. Если сообщения слишком длинные, вывод будет плохо читаться даже в сокращенном формате.

Практический совет по сообщению коммита:

  • первая строка — короткий заголовок (до 50–72 символов);
  • пустая строка;
  • более подробное описание, если нужно.

git log --oneline показывает только первую строку, поэтому именно она должна быть максимально информативной.


В итоге git log --oneline — это простой, но очень мощный инструмент для повседневной работы с историей Git. Он позволяет смотреть на историю поверхностно и быстро, а при необходимости — уже углубляться с помощью других опций (-p, --stat, --pretty=format и так далее).

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

Как отсортировать вывод git log --oneline по автору или дате

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

git log --oneline --since="2024-11-01" --until="2024-11-30"
# Показать только коммиты за указанный период

Сортировка всегда идет по дате коммита (от новых к старым). Изменить порядок можно только на обратный:

git log --oneline --reverse
# Показать от старых к новым

Как показать только merge-коммиты в формате oneline

Используйте опцию --merges:

git log --oneline --merges
# Показать только merge-коммиты

Можно комбинировать с --graph, чтобы лучше видеть структуру слияний:

git log --oneline --graph --merges

Как вывести git log --oneline для удаленной ветки без переключения на нее

Не нужно делать checkout, достаточно указать имя ветки:

git log --oneline origin/feature/login
# Показать историю удаленной ветки origin/feature/login

Или сравнить с локальной:

git log --oneline feature/login..origin/feature/login
# Коммиты, которых нет в вашей локальной ветке, но есть на удаленной

Как вывести git log --oneline только для коммитов в текущем стэше

Стэш — это специальная область, но его содержимое можно посмотреть:

git log --oneline refs/stash
# Показать список всех записей в стэше

А для конкретной записи (например, stash@{0}):

git show --oneline stash@{0}
# Показать краткую информацию о конкретном стэше

Как сохранить вывод git log --oneline в файл для отчета

Можно просто перенаправить вывод в файл:

git log --oneline > history.txt
# Сохранить всю краткую историю в файл

git log --oneline v1.0.0..v1.1.0 > release-notes.txt
# Сохранить краткую историю изменений между двумя релизами
Стрелочка влевоФильтрация по дате в git log - использование флага --sinceПросмотр истории в Git с помощью git logСтрелочка вправо

Постройте личный план изучения 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 ₽
Подробнее

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