Программирование и IT

git log

Команда показывает историю: какие коммиты привели репозиторий к нынешнему состоянию. Без флагов вывод многословен и почти бесполезен, зато с несколькими ключами превращается в инструмент поиска — по автору, по дате, по файлу и даже по исчезнувшей строке кода.

Обновлено
В этой статье

Вывод по умолчанию#

$ git log
commit 9f3c2a1b8d7e6f5a4c3b2a1908d7e6f5a4c3b2a1 (HEAD -> main)
Author: Мария Ковалёва <m.kovaleva@example.com>
Date:   Mon Sep 14 12:04:11 2026 +0300

    сверка остатков по складу

commit 0f4b8a3c5d6e7f8091a2b3c4d5e6f708192a3b4c
Author: Пётр Сомов <p.somov@example.com>
Date:   Fri Sep 11 17:22:40 2026 +0300

    базовый расчёт себестоимости

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

Понять, чьи это коммиты и когда они сделаны, так можно. Понять форму истории —
нет, для этого нужны другие форматы.

Короткие форматы#

git log --oneline              # хеш и заголовок, по строке на коммит
git log --oneline -10          # только десять последних
git log --stat                 # плюс список файлов и объём правок
git log -p                     # плюс полный текст изменений
git log --graph --oneline --decorate --all   # граф всех веток

Последняя строка — то, что обычно имеют в виду под «красивым» выводом:

$ git log --graph --oneline --decorate --all
*   5c1a9f0 (HEAD -> main) слияние ветки печати
|\
| * 3b7e442 (report-pdf) поля для подписи
| * a91cc05 шаблон печатной формы
* | 77d0e1b округление валюты
|/
* 0f4b8a3 базовый расчёт себестоимости

Левый столбец — линии веток, звёздочка — коммит. Здесь видно, что ветка
report-pdf отошла от общего предка, в main тем временем правили
округление, а верхний коммит их соединил.

Формат настраивается точнее через --pretty:

$ git log --pretty=format:'%h %ad %an — %s' --date=short -3
9f3c2a1 2026-09-14 Мария Ковалёва — сверка остатков по складу
77d0e1b 2026-09-12 Мария Ковалёва — округление валюты
0f4b8a3 2026-09-11 Пётр Сомов — базовый расчёт себестоимости

Здесь %h — короткий хеш, %ad — дата автора, %an — имя, %s — заголовок
сообщения. Набирать это каждый раз незачем — заведи псевдоним:

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

После этого хватает git lg.

Поиск по истории#

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

git log --author="Сомов"                 # чьи-то коммиты
git log --since="2026-09-01" --until="2026-09-15"   # за период
git log --grep="округл"                  # по тексту сообщения
git log -- billing/invoice.py            # правки одного файла
git log --follow -- billing/invoice.py   # с учётом переименований файла
git log -S"total_sum"                    # где строка появилась или исчезла
git log main..feature-pdf                # что есть в ветке и нет в main

Про -S стоит сказать отдельно: это не поиск по тексту сообщений, а поиск по
содержимому изменений. Команда находит коммиты, где количество вхождений
строки изменилось, — то есть буквально тот момент, когда переменная появилась
или была удалена.

$ git log -S"total_sum" --oneline -- billing/
77d0e1b округление валюты
0f4b8a3 базовый расчёт себестоимости

Запись через две точки (main..feature-pdf) читается как «то, до чего
дотягивается вторая ссылка, но не первая». Удобно перед отправкой ветки:
видно ровно те коммиты, которые ты собираешься предложить.

Пример: найти, когда сломалось#

Строка в отчёте стала считаться неверно, а когда — неизвестно. Сначала
сужаем круг по файлу и объёму правок:

$ git log --stat --oneline -- billing/invoice.py
77d0e1b округление валюты
 billing/invoice.py | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

Дальше смотрим сам коммит целиком:

$ git show 77d0e1b

Команда git show выводит сообщение и изменения одного коммита — это тот же
формат, что у git log -p, но для единственной записи. Если после разбора
коммит нужно отменить, способы собраны в статье
как отменить коммит.

Чего git log не покажет#

История — это коммиты. Всё, что не закоммичено, в неё не попадает: незалитые
правки смотрят через git status и git diff, отложенное на полку — через
git stash list, о чём подробнее в разборе git stash.

Второе исключение — коммиты, до которых не дотягивается ни одна ветка.
После сброса ветки или переноса они выпадают из вывода git log, но остаются
в репозитории; ищут их в журнале ссылок git reflog.

Третье — удалённые ветки и чужие коммиты, которых у тебя ещё нет. git log не
ходит в сеть; сначала git fetch origin, потом git log origin/main.

Частые ошибки#

Ищут текст кода через --grep. Этот фильтр смотрит только в сообщения
коммитов. По содержимому правок ищет -S (по количеству вхождений) или -G
(по регулярному выражению в тексте изменений).

История файла обрывается на переименовании. Без --follow git показывает
только то, что происходило с нынешним путём. Флаг заставляет продолжить поиск
в прежних именах.

Ждут, что git log покажет ветку целиком. По умолчанию команда выводит
историю текущей ветки. Чтобы увидеть все, нужен --all; чтобы конкретную —
её имя аргументом: git log feature-pdf.

Путают порядок в диапазоне. git log feature..main и git log main..feature дают разные ответы. Слева — то, что вычитается, справа — то,
что показывается. Проверяется быстро: если вывод пуст, поменяй местами.

План по этапам

  1. Посмотреть форму историиgit log --graph --oneline --decorate --all; запомнить, что выход из просмотрщика — q.
  2. Завести псевдонимgit config --global alias.lg с любимым набором флагов.
  3. Сузить выборкуФильтры --author, --since, --grep и путь после двух тире — складываются друг с другом.
  4. Найти изменение по кодуgit log -S"строка" -- путь: коммиты, где строка появилась или исчезла.
  5. Разобрать найденноеgit show <хеш> целиком; при необходимости — сравнение диапазоном main..ветка.

Начать изучать эту тему у себя

План ляжет в твой репозиторий: отмечай этапы, веди конспект — история изменений покажет, как ты продвинулся.

Начать план

Проверь себя

1.Какой флаг git log ищет коммиты, в которых менялось количество вхождений строки кода?

2.Что покажет git log main..feature?

3.История файла обрывается на месте его переименования. Какой флаг это исправит?

Источники

Было полезно?

Ещё темы

Программирование и IT Как создать репозиторий с нуля Репозиторий — это папка проекта плюс скрытая папка `.git`, в которой хранится вся история. Создаётся одной командой, но между ней и первым осмысленным коммитом есть несколько шагов, которые потом трудно переделать: имя ветки, список игнорируемых файлов, привязка к серверу. Программирование и IT git push Пока ты не выполнил git push, твои коммиты существуют только на твоём диске. Команда отправляет их в удалённый репозиторий и сдвигает там указатель ветки — поэтому она же чаще всего и отказывает, если кто-то успел отправить своё раньше. Программирование и IT git merge Слияние переносит работу из одной ветки в другую. Команда git merge берёт указанную ветку и соединяет её историю с текущей — иногда просто сдвигая указатель, иногда создавая отдельный коммит, а иногда останавливаясь и прося помощи. Программирование и IT git commit Коммит — это сохранённое состояние проекта с автором, временем и сообщением. Команда git commit берёт то, что ты заранее отобрал командой git add, и записывает это в историю одной неделимой порцией. Программирование и IT git clone Команда git clone забирает репозиторий с сервера целиком — со всей историей, ветками и тегами — и кладёт копию в новую папку на твоём компьютере. С неё начинается работа с любым уже существующим проектом, своим или чужим. Программирование и IT git stash Заначка — временная полка для незаконченных правок. Ты кладёшь туда всё, что наработал, получаешь чистую рабочую копию, делаешь срочное дело и возвращаешь отложенное обратно. Полка общая на весь репозиторий и устроена как стопка: последнее положенное лежит сверху.

Ещё сценарии