Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как посмотреть историю коммитов в Git
История коммитов — это запись всех изменений, внесённых в проект. Просмотр истории критичен для отладки, код-ревью и понимания эволюции проекта.
Основная команда: git log
# Базовый просмотр истории
git log
# Вывод примерно такой:
commit 3a4c5f7a8b9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e
Author: John Doe <john@example.com>
Date: Wed Mar 22 10:30:45 2026 +0300
Fixed bug in payment processing
commit 2f1a8b7c6d5e4c3b2a1f9e8d7c6b5a4f3e2d1c0b
Author: Jane Smith <jane@example.com>
Date: Tue Mar 21 14:22:15 2026 +0300
Added user authentication
Форматированные версии
Компактный формат (одна строка на коммит):
git log --oneline
# Вывод:
3a4c5f7 Fixed bug in payment processing
2f1a8b7 Added user authentication
5c4d3e2 Updated dependencies
С информацией об авторе:
git log --oneline --author="John"
# Показывает только коммиты John
git log --oneline --author="John" --author="Jane"
# Коммиты John или Jane
Декоративный формат (красивый вывод):
git log --graph --oneline --all --decorate
# Вывод с веточками:
* 3a4c5f7 (HEAD -> main) Fixed bug in payment processing
* 2f1a8b7 Added user authentication
|\
| * 5c4d3e2 (develop) New feature
|/
* 1a2b3c4 Initial commit
Фильтрация по дате
# За последние N дней
git log --since="2 days ago"
# За конкретный период
git log --since="2026-03-01" --until="2026-03-22"
# За последние N коммитов
git log -n 5 # Последние 5 коммитов
git log -10 # Последние 10 коммитов
Фильтрация по файлам
# История изменений конкретного файла
git log -- src/main/java/User.java
# История с показом изменений в файле
git log -p -- src/main/java/User.java
# История конкретной функции
git log -p -S "methodName" -- src/main/java/User.java
# Файлы, которые были изменены
git log --name-status
# Статистика: сколько строк изменено
git log --stat
Поиск в истории
По сообщению коммита:
# Поиск по тексту сообщения
git log --grep="bug fix"
# Case-insensitive поиск
git log --grep="Bug Fix" -i
# Поиск по регулярному выражению
git log --grep="^fix:" # Коммиты, начинающиеся на "fix:"
По содержимому коммита:
# Поиск коммитов, где была добавлена строка
git log -S "password" -- .
# Найдёт коммиты, где добавилось или удалилось слово "password"
# Поиск с регулярным выражением в diff
git log -G "private.*password"
Детальный просмотр
Показать изменения в каждом коммите:
# Patch формат (diff для каждого коммита)
git log -p
# То же самое для конкретного файла
git log -p -- src/main/java/User.java
# Последние N коммитов с изменениями
git log -p -5
Просмотр конкретного коммита:
# Полная информация о коммите
git show 3a4c5f7
# Изменения в конкретном файле
git show 3a4c5f7:src/main/java/User.java
# Что изменилось между двумя коммитами
git diff 2f1a8b7..3a4c5f7
Просмотр веток и мержей
# История с визуализацией веток
git log --graph --oneline --all
# Красивый формат
git log --graph --oneline --all --decorate --author-date-order
# Только мержи
git log --merges
# Только non-merges коммиты
git log --no-merges
Аналитика истории
Статистика по авторам:
# Количество коммитов по авторам
git shortlog -s -n
# Вывод:
25 John Doe
18 Jane Smith
12 Bob Johnson
# С email
git shortlog -s -n -e
Дата первого и последнего коммита:
# Первый коммит
git log --reverse --oneline | head -1
# Последний коммит
git log --oneline | head -1
Практические примеры
Найти, кто удалил функцию:
# Ищем коммиты, где функция исчезла
git log -S "public void doSomething()" -- src/main/java/
Найти, когда была добавлена ошибка:
# Используем git bisect для бинарного поиска
git bisect start
git bisect bad HEAD # Текущий коммит плохой
git bisect good v1.0.0 # Версия 1.0.0 хорошая
# Git будет предлагать коммиты для проверки
Просмотр истории для code review:
# Коммиты в ветке, не в main
git log main..feature-branch --oneline
# С показом изменений
git log -p main..feature-branch
# Статистика
git log --stat main..feature-branch
Полезные алиасы
Добавь в ~/.gitconfig:
[alias]
lg = log --graph --oneline --all --decorate
ll = log --oneline -10
lp = log -p
authors = shortlog -s -n -e
today = log --since="midnight" --oneline
Тогда можно писать просто:
git lg # Красивая история
git ll # Последние 10
git authors # Статистика авторов
Best practices
- Читаемые сообщения коммитов — помогают при поиске в истории
- Логичные группировки коммитов — не смешивай разные фичи
- Squash мелкие коммиты перед мержем — история будет чище
- Используй tags для версий — git log --decorate покажет их
История коммитов — это документация кода, которую всегда нужно поддерживать в чистоте.