Skip to content

Git: ветки, откат и история

В главе про первый проект мы уже делали git init и git commit. Этого хватает для старта, но чаще всего именно git становится источником стресса — особенно когда ИИ что-то сломал или нужно вернуться к старой версии. Разберём практику без лишней теории.

Зачем вообще коммитить

Каждый коммит — это точка, к которой можно вернуться. Пока ты не закоммитил — у тебя нет машины времени. Коммиты можно воспринимать как ручные сохранения в игре: прошёл сложный уровень — сохранись.

Правило: коммить каждый раз, когда что-то заработало. Добавил форму — сохранился. Подключил API — сохранился.

Базовые команды (без них никуда)

bash
git status            # что изменилось с последнего коммита
git diff              # посмотреть конкретные изменения
git add .             # добавить все изменённые файлы
git add bot.py        # добавить только конкретный файл
git commit -m "описание что сделал"
git log --oneline     # история коммитов (одна строка на коммит)

Проще говоря

git status — это инвентаризация: что лежит в корзине (staged) и что изменилось, но ещё не в корзине. git add — кладёшь в корзину. git commit — несёшь корзину на склад (создаёшь снимок).

Как откатиться к последнему коммиту

Если ИИ сломал что-то в файлах — и ты ещё не закоммитил эти изменения:

bash
git checkout .        # откатить ВСЕ несохранённые изменения

Или конкретный файл:

bash
git checkout bot.py   # откатить только bot.py

Осторожно

git checkout . уничтожает все несохранённые изменения без возможности восстановления. Если не уверен — сначала сделай git diff и посмотри что будет потеряно.

Как вернуться к конкретному коммиту

Сначала посмотри историю:

bash
git log --oneline

Увидишь что-то вроде:

a8d8f95 Add telegram bot chapter
2f9eb62 Change fonts
ce4a7ca Add Telegram footer
7836397 Add Solutions section

Хочешь вернуться к состоянию «Add Telegram footer»? Возьми его хэш (ce4a7ca):

bash
git checkout ce4a7ca -- .

Файлы вернутся к тому состоянию. Чтобы зафиксировать это:

bash
git add .
git commit -m "revert: вернулся к версии до fonts"

Ветки — работай спокойно

Ветка — это отдельная линия разработки. Ты создаёшь ветку, экспериментируешь в ней. Если получилось — сливаешь в основную (main). Если нет — просто удаляешь ветку.

Проще говоря

Основная ветка — это твоя рабочая тетрадь. Новая ветка — черновик. Ты пробуешь что-то в черновике. Понравилось — переписываешь в тетрадь. Не понравилось — выбрасываешь черновик, тетрадь чистая.

Создать и переключиться на ветку

bash
git checkout -b feature/dark-mode    # создать ветку и перейти в неё

Теперь все коммиты идут в эту ветку, main остаётся нетронутой.

Посмотреть список веток

bash
git branch

Активная ветка отмечена *.

Слить ветку в main

bash
git checkout main          # вернуться в основную
git merge feature/dark-mode    # влить изменения из ветки

Удалить ветку после слияния

bash
git branch -d feature/dark-mode

Практический сценарий с ИИ

Хочешь попросить ИИ переделать дизайн, но боишься что сломает — создай ветку:

bash
git checkout -b experiment/new-design
# отдаёшь ИИ задачу
# ИИ вносит изменения
# проверяешь результат

Если понравилось:

bash
git add .
git commit -m "new design: gradient background + cards"
git checkout main
git merge experiment/new-design

Если не понравилось:

bash
git checkout main            # вернуться в основную
git branch -D experiment/new-design    # удалить ветку (с -D — без вопросов)

Основная ветка нетронута.

Загрузить проект на GitHub (если ещё нет)

bash
# один раз:
git remote add origin https://github.com/ТВОЙ_ЛОГИН/РЕПО.git
git push -u origin main

# потом просто:
git push

Скачать изменения с GitHub (если работаешь с нескольких компьютеров)

bash
git pull

Шпаргалка

ЗадачаКоманда
Что изменилосьgit status
Посмотреть измененияgit diff
Добавить всёgit add .
Сохранитьgit commit -m "описание"
Историяgit log --oneline
Откатить всё незакоммиченноеgit checkout .
Создать веткуgit checkout -b имя-ветки
Переключиться на веткуgit checkout имя-ветки
Слить веткуgit merge имя-ветки
Отправить на GitHubgit push
Забрать с GitHubgit pull

Что дальше?

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