Основы Git: ветки, слияния и pull request
Git хранит снимки проекта во времени. Ветка — подвижный указатель на коммит. Слияние объединяет истории (часто после ревью). Pull request (merge request) — социальный слой: обсуждение diff, CI, затем интеграция.
Виджеты урока: git-graph показывает топологию — так видно, почему конфликты возникают на слиянии. Pipeline — путь изменения от редактора до общего remote. Code explorer разбирает команды. Таблица — merge vs rebase. Вкладки — синхронизация и откат.
Сначала смотрите на граф: main прошёл c1 → c2, ветка feature/login добавила c3 поверх c2. Слияние влило c3 в main как c4. Если бы двое правили одни строки после c2, Git остановился бы на конфликте — нужно собрать итоговый файл вручную.
Файлы в рабочей директории. `git add` кладёт снимок в индекс (staging). `git commit` фиксирует его в локальном репозитории. `git push` отправляет коммиты на remote (например origin).
Шаги pipeline: Правки — ещё не в истории. Индекс — что войдёт в следующий коммит (`git diff --cached`). Коммит — локальный DAG. Push публикует; до него CI и бэкапы «не видят» работу. PR — ревью и проверки до попадания в main.
Code explorer: строки идут в порядке ветка → статус → diff → индекс → коммит → push. В новых версиях Git для веток предпочтительны `git switch` / `git restore`.
git checkout -b feature/login
# правки файлов, затем:
git status
git diff
git add -p
git commit -m "feat: форма входа"
git push -u origin feature/login
Оба способа подтянуть main в feature. Merge добавляет merge-коммит (как c4). Rebase переписывает коммиты поверх main — линейная история, но меняются SHA. Не делайте rebase опубликованных коммитов, от которых ответвились другие.
| Merge | Rebase | |
|---|---|---|
| Граф истории | Видна развилка и пузырь merge — отражает параллельную работу | Линия: коммиты feature переносятся на вершину main |
| Совместная работа | Безопасно при общих ветках — без переписывания истории | Опасно, если коллеги уже стянули старые SHA |
| Конфликты | Обычно один раунд при слиянии | Может быть конфликт на каждый переносимый коммит |
| Когда | Стандарт «Create merge commit» на GitHub/GitLab | git pull --rebase; интерактивный rebase перед merge |
Перед ревью
git fetch origin
git checkout feature/login
git merge origin/main
# или: git rebase origin/main