git log - главная команда для чтения истории. Технически она
делает обход графа коммитов через git rev-list и для каждого
коммита печатает его описание через git cat-file.
Базовый вызов
git log
Печатает каждый коммит: SHA, автор, дата, сообщение. По умолчанию
с пейджером (less), q для выхода.
Самые полезные формы
git log --oneline # одна строка на коммит
git log --oneline -10 # последние 10
git log --oneline --graph --all # дерево всех веток
git log --stat # + сводка изменённых файлов
git log -p # + полный diff каждого коммита
git log --follow file.txt # история одного файла, с учётом переименований
Самая нужная форма для повседневного просмотра - --oneline --graph --all --decorate. Многие настраивают её как алиас:
git config --global alias.lg "log --oneline --graph --all --decorate"
git lg
Фильтры
git log --since="2 weeks ago"
git log --until=2026-01-01
git log --author=Linus
git log --grep="fix.*memory" # regex по сообщениям
git log -S "deprecated" # коммиты, где появилось/исчезло это слово
git log -- src/api.ts # только коммиты, трогавшие путь
git log main..feature # коммиты в feature, которых нет в main
-S (pickaxe) - особенно мощный фильтр для поиска «когда удалили
эту функцию», «когда впервые появилось это поле».
Форматы вывода
git log --pretty=format:"%h %an %s" # короткий SHA, автор, тема
git log --pretty=fuller # обе даты - author и committer
git log --format=%H -n 1 # только полный SHA последнего
Формат --pretty=fuller особенно полезен после rebase, чтобы
увидеть расхождение author-date и committer-date.
Подводные камни
git log file.txtбез--followтеряет историю при переименовании.git log --graphдля большой истории может стать нечитаемым - в этом случае фильтруй по ветке или по пути.- В сценариях для скриптов вместо
git logлучше использоватьgit rev-list(plumbing) - стабильный формат.