Урок 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 не даст удалить ветку, если её изменения ещё никуда не влиты, — защита от случайной потери работы.
Как это выглядит
- mainрабочая версия
- new-headerкоммиты задачи
- mergeизменения в main
- Удалить веткузадача закрыта
Правила хорошего тона
- Одна задача — одна ветка. Новая шапка и форма заказа — две ветки.
- Понятные имена:
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.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Зачем нужны ветки?
В отдельной ветке можно пробовать что угодно. Если не получилось — ветку просто удаляют, а main остаётся рабочей.
-
Какая команда создаст ветку header и сразу переключится на неё?
Флаг -c (create) создаёт ветку. git branch header только создал бы её, не переключаясь.
-
Вы на ветке main и выполнили git merge header. Что произошло?
merge вливает указанную ветку в текущую. Поэтому перед слиянием переключаются на ту ветку, которая должна получить изменения.
-
Как посмотреть список веток и узнать, на какой вы сейчас?
git branch выводит все локальные ветки, а текущая помечена звёздочкой. Текущую ветку показывает и git status.