Олег Марков
Краткая история репозитория в Git с помощью git log --oneline
Введение
Когда репозиторий растет, история коммитов становится все более громоздкой и сложной. Полный вывод git log с автором, датой, хешем и сообщением быстро превращается в «простыню», в которой трудно ориентироваться.
Команда git log --oneline решает эту проблему: она показывает историю в сильно сжатом виде, оставляя только самое важное — укороченный хеш коммита и его сообщение. Смотрите, я покажу вам, как с помощью этой простой опции можно:
- быстро просматривать историю;
- понимать структуру веток;
- искать нужные изменения;
- анализировать слияния;
- делать это удобно прямо в терминале, без тяжелых графических клиентов.
Давайте разберемся, как устроена git log --oneline, какие есть полезные сочетания с другими опциями и как применять их в повседневной работе.
Хотите разобраться глубже? Пройдите Освоить Git на курсе — практика, наставники, реальные проекты.
Курс по теме
Освоить Git на курсе
40 000+ студентов · рейтинг 4.8 · гарантия возврата 30 дней
Что такое 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 понимает форматы вроде:
yesterday2 days ago3 weeks ago2024-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 выглядит так:
a1b2c3d4e5f67890123456789abcdef012345678Git использует столько символов, сколько достаточно, чтобы однозначно отличить этот коммит от других в репозитории. Обычно 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 до уровня Middle — бесплатно!
Git — часть карты развития Frontend
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Git
Лучшие курсы по теме

Основы Git
Антон Ларичев
TypeScript с нуля
Антон Ларичев