Урок 5 из 8 · 20 мин · обновлено

Ветки: параллельная работа над проектом

Зачем нужны ветки, как создать ветку и переключиться на неё, как слить изменения обратно в основную ветку и удалить ненужную.

Зачем нужны ветки

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

Ветка — отдельная линия коммитов. В ней можно спокойно работать над задачей, не трогая основную версию проекта. Получилось — вливаете изменения обратно. Не получилось — удаляете ветку, и ничего не сломано.

Основная ветка обычно называется main. В ней хранят рабочую, проверенную версию.

Создаём ветку

Терминал
git switch -c new-header
Результат
Switched to a new branch 'new-header'

Команда создала ветку new-header и переключила вас на неё. Теперь все коммиты будут попадать сюда, а main останется нетронутой.

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

Терминал
git branch
Результат
  main
* new-header

Звёздочка отмечает текущую ветку.

Переключаемся

Работаем в ветке как обычно: правим файлы, коммитим.

Терминал
git add .
git commit -m "Переделал шапку: логотип слева, меню справа"

Срочно нужна правка на рабочей версии? Переключаемся:

Терминал
git switch main

Файлы в папке сами поменяются на версию из main — новой шапки там нет. Исправляем опечатку, коммитим и возвращаемся:

Терминал
git switch new-header

Перед переключением сохраняйте работу коммитом: если остались несохранённые правки, которые конфликтуют с другой веткой, Git не даст переключиться и попросит сначала с ними разобраться.

Сливаем ветку

Шапка готова. Чтобы перенести её в рабочую версию, переключаемся на ту ветку, которая получит изменения, и вливаем:

Терминал
git switch main
git merge new-header

Изменения из new-header оказались в main. Если пока вы работали в ветке, в main тоже появились коммиты — как срочная правка выше, — Git создаст отдельный коммит слияния и может открыть редактор с готовым сообщением. Чтобы принять его без редактора, пишите git merge --no-edit new-header. А если редактор открылся и это Vim — наберите :wq и нажмите Enter.

Ветка больше не нужна — удаляем:

Терминал
git branch -d new-header

Git не даст удалить ветку, если её изменения ещё никуда не влиты, — защита от случайной потери работы.

Как это выглядит

  1. mainрабочая версия
  2. new-headerкоммиты задачи
  3. mergeизменения в main
  4. Удалить веткузадача закрыта

Правила хорошего тона

  • Одна задача — одна ветка. Новая шапка и форма заказа — две ветки.
  • Понятные имена: new-header, fix-cart-total, feature/order-form.
  • Короткая жизнь. Чем дольше ветка живёт отдельно, тем сложнее её потом слить: основная версия успевает уйти вперёд.

Попробуйте сами. Создайте ветку footer, добавьте в index.html подвал и сделайте коммит. Переключитесь на main и убедитесь, что подвала там нет. Затем влейте ветку и удалите её.

Решение
Терминал
git switch -c footer
# добавили подвал в index.html
git add index.html
git commit -m "Добавил подвал с контактами"

git switch main          # подвала в файле нет
git merge footer         # теперь есть
git branch -d footer
git log --oneline

Пока ветка не влита, main не знает о её коммитах. После слияния коммит с подвалом появится в истории main.

Мини-тест: проверьте себя

Закрепите урок: несколько вопросов, разбор ответов — в конце.

  1. Зачем нужны ветки?

  2. Какая команда создаст ветку header и сразу переключится на неё?

  3. Вы на ветке main и выполнили git merge header. Что произошло?

  4. Как посмотреть список веток и узнать, на какой вы сейчас?