# git log _Ежедневная работа · GitLab Knowledge Base_ **TL;DR:** Обходит граф коммитов и печатает каждый. По умолчанию начинает с HEAD и идёт по родителям. Десяток флагов покрывает 95% сценариев просмотра истории. `git log` - главная команда для чтения истории. Технически она делает обход графа коммитов через `git rev-list` и для каждого коммита печатает его описание через `git cat-file`. ## Базовый вызов ```bash git log ``` Печатает каждый коммит: SHA, автор, дата, сообщение. По умолчанию с пейджером (`less`), `q` для выхода. ## Самые полезные формы ```bash 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`. Многие настраивают её как алиас: ```bash git config --global alias.lg "log --oneline --graph --all --decorate" git lg ``` ## Фильтры ```bash 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) - особенно мощный фильтр для поиска «когда удалили эту функцию», «когда впервые появилось это поле». ## Форматы вывода ```bash 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) - стабильный формат. ## Команды ```bash git log --oneline --graph --all ``` Дерево коммитов всех веток, по строчке ```bash git log -p -- file.txt ``` История одного файла со всеми diff'ами ```bash git log main..feature ``` Коммиты в feature, которых ещё нет в main ```bash git log -S 'deprecated' ``` Найти коммит, где слово впервые появилось или исчезло ## См. также - [git status](/courses/git/kb/status.md) - [git commit](/courses/git/kb/commit-cmd.md) - [git rev-parse](/courses/git/kb/rev-parse.md)