История и изменения: log и diff
Умеешь делать коммиты — хорошо. Теперь нужно уметь их читать: что изменилось, когда, и почему.
git log — история коммитов
git logВыводит полный лог: хеш, автор, дата, сообщение. Слишком многословно — используй флаги.
git log --onelinea3f7c21 feat: добавил главную страницу
8b2d4e9 fix: убрал опечатку в заголовке
4c1e0f3 init: первый коммит
Каждая строка — один коммит. Слева — сокращённый хеш (7 символов из 40), справа — сообщение.
Полезные флаги
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 показывает только текущую. Чтобы увидеть всё:
git log --all --oneline --graph* a3f7c21 (HEAD -> main) feat: профиль пользователя
| * 7d2e4b1 (feature) feat: поиск
|/
* 8b2d4e9 fix: авторизация
* 4c1e0f3 init: первый коммит
* — коммит, | и / — линии веток. Видно, где ветки разошлись и где соединились. Это самая полезная команда для понимания состояния репозитория.
git diff — что изменилось?
git diff работает в трёх режимах в зависимости от аргументов.
Режим 1: unstaged изменения
git diffПоказывает что изменилось в рабочей папке, но ещё не добавлено в staging (git add не запускался).
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 изменения
git diff --staged
# или --cached — то же самоеПоказывает что добавлено в staging и войдёт в следующий git commit. Полезно проверить перед коммитом — что именно ты фиксируешь.
Режим 3: между коммитами или ветками
git diff HEAD~1 # текущее состояние vs предыдущий коммит
git diff main feature # что изменилось в feature относительно main
git diff a3f7c21 8b2d4e9 # между двумя конкретными коммитамиHEAD~1 — «один коммит назад от HEAD». HEAD~3 — три коммита назад.
git show — посмотреть конкретный коммит
git show a3f7c21
git show HEAD # последний коммит
git show HEAD~2 # два коммита назадВыводит сообщение коммита + весь diff. Удобно разобраться, что именно было сделано в каком-то конкретном изменении.
Типичный рабочий процесс
# Перед тем как коммитить — проверить что изменилось:
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 --oneline