Знакомство с Git
1Что такое Git и зачем он нужен2Первые шаги: init, add, commit3История и изменения: log и diff← вы здесь
Урок 3~12 минут

История и изменения: log и diff

Умеешь делать коммиты — хорошо. Теперь нужно уметь их читать: что изменилось, когда, и почему.

git log — история коммитов

bash
git log

Выводит полный лог: хеш, автор, дата, сообщение. Слишком многословно — используй флаги.

bash
git log --oneline
a3f7c21 feat: добавил главную страницу
8b2d4e9 fix: убрал опечатку в заголовке
4c1e0f3 init: первый коммит

Каждая строка — один коммит. Слева — сокращённый хеш (7 символов из 40), справа — сообщение.

Полезные флаги

bash
git log -5                    # последние 5 коммитов
git log --oneline -10         # последние 10 в одну строку
git log --author="Ivan"       # коммиты конкретного автора
git log --since="2 weeks ago" # за последние 2 недели
git log --grep="fix"          # коммиты с "fix" в сообщении
git log -p                    # показать diff каждого коммита

Граф веток

Когда появляются ветки — git log показывает только текущую. Чтобы увидеть всё:

bash
git log --all --oneline --graph
* a3f7c21 (HEAD -> main) feat: профиль пользователя
| * 7d2e4b1 (feature) feat: поиск
|/
* 8b2d4e9 fix: авторизация
* 4c1e0f3 init: первый коммит

* — коммит, | и / — линии веток. Видно, где ветки разошлись и где соединились. Это самая полезная команда для понимания состояния репозитория.

git diff — что изменилось?

git diff работает в трёх режимах в зависимости от аргументов.

Режим 1: unstaged изменения

bash
git diff

Показывает что изменилось в рабочей папке, но ещё не добавлено в staging (git add не запускался).

diff
diff --git a/index.js b/index.js
index 8b13789..9daeafb 100644
--- a/index.js
+++ b/index.js
@@ -1 +1,3 @@
 hello
+
+world

Знак + — добавлено, - — удалено. Строки без знака — контекст (не изменились).

Режим 2: staged изменения

bash
git diff --staged
# или --cached — то же самое

Показывает что добавлено в staging и войдёт в следующий git commit. Полезно проверить перед коммитом — что именно ты фиксируешь.

Режим 3: между коммитами или ветками

bash
git diff HEAD~1        # текущее состояние vs предыдущий коммит
git diff main feature  # что изменилось в feature относительно main
git diff a3f7c21 8b2d4e9  # между двумя конкретными коммитами

HEAD~1 — «один коммит назад от HEAD». HEAD~3 — три коммита назад.

git show — посмотреть конкретный коммит

bash
git show a3f7c21
git show HEAD         # последний коммит
git show HEAD~2       # два коммита назад

Выводит сообщение коммита + весь diff. Удобно разобраться, что именно было сделано в каком-то конкретном изменении.

Типичный рабочий процесс

bash
# Перед тем как коммитить — проверить что изменилось:
git status            # какие файлы изменились
git diff              # что именно в них изменилось
git add src/auth.js
git diff --staged     # проверить что попало в staging
git commit -m "fix: ..."
 
# После коммита — убедиться, что всё правильно:
git log --oneline -5
git show HEAD

Не коммить вслепую. Привычка смотреть git diff --staged перед коммитом спасёт тебя от случайных изменений в коммите — отладочных console.log, временных правок, паролей в конфигах.

В следующем модуле — ветки: как Git позволяет работать параллельно и потом объединять результаты.

git log — машина времени. git diff — лупа. Без них ты слепой разработчик.
$ git log --oneline
a3f7c21HEAD → mainMerge branch "feature"2ч назад
8b2d4e9featurefeat: поиск по каталогу4ч назад
d4e5f6afix: исправил 404 на главной1д назад
7c8d9e0feat: добавил главную страницу2д назад
4b5c6d7docs: обновил README3д назад
f0e1d2cinit: первый коммит4д назад
Кликни на коммит → посмотри diff
🎯
Миссия 1 из 4
Как вывести историю коммитов в одну строку на коммит?