Просмотр истории: log, show и diff
Три команды, которые отвечают на вопросы «кто это сделал?», «что в этом коммите?» и «что я наменял?».
git log — лента истории
Команда git log показывает список коммитов от свежих к старым:
git logВывод:
commit a1b2c3d4e5f6 (HEAD -> main) Author: Ivan Petrov <[email protected]> Date: Sat Jun 14 12:30:00 2025 Добавить форму входа commit 9f8e7d6c5b4a Author: Ivan Petrov <[email protected]> Date: Sat Jun 14 11:05:00 2025 Инициализировать проект
Полный вывод многословен. На практике чаще пользуются компактными вариантами:
git log --oneline # по одной строке на коммит
git log --oneline --graph # плюс ASCII-граф веток
git log -p # с изменениями (патчем) каждого коммита
git log -5 # только 5 последнихВывод для --oneline:
a1b2c3d Добавить форму входа 9f8e7d6 Инициализировать проект
git show — заглянуть в коммит
git show показывает подробности одного коммита: сообщение и все его изменения. По умолчанию — последний коммит, но можно указать хеш:
git show a1b2c3dЭто удобно, когда нужно вспомнить, что именно вошло в конкретный коммит.
git diff — что изменилось
Команда git diff сравнивает разные состояния. Важно понимать, что она сравнивает по умолчанию:
| Команда | Сравнивает |
git diff | рабочую директорию с индексом (что ещё не в staging) |
git diff --staged | индекс с последним коммитом (что войдёт в коммит) |
git diff HEAD | рабочую директорию с последним коммитом |
git diff abc123 def456 | два конкретных коммита между собой |
Типичный вывод diff:
Вывод:
diff --git a/app.py b/app.py
@@ -1,3 +1,4 @@
def main():
- print("hi")
+ print("Hello, world")
+ return 0Строки с - удалены, с + — добавлены. Запускайте git diff --staged прямо перед коммитом, чтобы проверить, что именно вы фиксируете.
Поиск по истории
История ценна тем, что в ней можно искать. Несколько практичных приёмов git log:
git log --author="Ivan" # коммиты конкретного автора
git log --grep="баг" # коммиты, где в сообщении есть слово
git log --since="2 weeks ago" # за последние две недели
git log -- app.py # история изменений одного файлаЭти фильтры превращают историю из простого списка в инструмент расследования: «когда сломалась эта функция?», «кто и зачем трогал этот файл?». В реальной работе такие вопросы возникают постоянно.
git blame — кто написал строку
Отдельная полезная команда — git blame. Она показывает для каждой строки файла, в каком коммите и кем она была добавлена:
git blame app.pyНесмотря на «обвиняющее» название, цель тут не искать виноватых, а понять контекст: найдя коммит, вы прочитаете его сообщение и поймёте, зачем строку написали.
Итог
git log --oneline— быстрый обзор истории коммитов.git show <хеш>— содержимое конкретного коммита.git diffсравнивает рабочую директорию с индексом,--staged— индекс с коммитом.