Основы ветвления

GitBeginner
Практиковаться сейчас

Введение

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

В Git именно это позволяет делать ветвление. Оно создаёт параллельную линию разработки, в которой можно безопасно экспериментировать. Ветки — одна из важнейших возможностей Git: благодаря им изолированная работа становится простой и не требует больших затрат.

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

  1. Разработка возможностей: создайте новую систему входа в отдельном пространстве.
  2. Эксперименты: попробуйте новую идею дизайна, не нарушая работу текущего веб-сайта.
  3. Исправление ошибок: изолированно устраните критическую ошибку.

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

Создайте ветку для новой возможности

По умолчанию каждый репозиторий Git начинается с одной основной ветки, которую обычно называют master или main. Представляйте её как «основную временную шкалу» — официальную стабильную версию проекта.

Чтобы работать над новой возможностью, например страницей входа, и не подвергать риску стабильность основного проекта, создайте новую ветку.

Проверьте своё текущее положение:

git branch

Вывод:

* master

Символ * показывает, что сейчас вы находитесь на временной шкале master.

Эта отметка показывает текущий контекст ветки. В Git многие команды выполняются относительно ветки, на которую в данный момент указывает HEAD, поэтому важно знать, где вы находитесь.

Создайте новую ветку с именем feature_login:

git branch feature_login

Теперь вы создали новую временную шкалу! Однако вы ещё не переключились на неё.

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

Убедитесь, что ветка создана:

git branch

Вывод:

  feature_login
* master

Ветка feature_login существует, но символ * показывает, что вы всё ещё находитесь в master.

Переключитесь на новую ветку

Создать временную шкалу недостаточно — нужно перейти на неё. Для переключения между ветками используется команда git checkout.

Переключитесь на новую ветку:

git checkout feature_login

Вывод:

Switched to branch 'feature_login'

Убедитесь, что переключение выполнено:

git branch

Вывод:

* feature_login
  master

Звёздочка (*) переместилась! Теперь вы работаете в временной шкале feature_login. Все изменения, которые вы внесёте с этого момента, будут происходить только здесь.

Точнее, новые коммиты будут развивать ветку feature_login, а не master. Обе ветки по-прежнему используют общую историю до момента, в котором они разошлись.

Работайте в ветке для новой возможности

Теперь вы находитесь в безопасном пространстве для экспериментов. Давайте напишем код и создадим скрипт для нашей «возможности входа».

Создайте файл с именем login.sh:

echo "echo 'Logging in...'" > login.sh

Убедитесь, что файл появился в текущем каталоге:

ls

В выводе должны отображаться и README.md (унаследованный из master), и новый файл login.sh.

Сейчас login.sh — это просто файл на диске. Чтобы официально сохранить его в истории этой ветки, нужно создать коммит.

Это ещё раз показывает принцип работы веток: файлы появляются в рабочем дереве, но история ветки изменяется только после создания коммитов в этой ветке.

Зафиксируйте изменения в ветке

Сохраним проделанную работу. Помните стандартный рабочий процесс Git: Инициализация → добавление в индекс → коммит.

Проверьте состояние репозитория:

git status

Файл login.sh имеет статус Untracked.

Добавьте файл в индекс:

git add login.sh

Создайте коммит с файлом в истории feature_login:

git commit -m "Add login feature script"

Вывод:

[feature_login 8a2b3c] Add login feature script

Теперь это изменение навсегда записано, но только во временной шкале feature_login.

Именно благодаря такой изоляции ветки настолько полезны. Они позволяют разрабатывать, тестировать и экспериментировать, не продвигая основную ветку вперёд, пока вы не будете готовы.

Проверьте изоляцию веток

Настал важный момент. Мы утверждаем, что feature_login — это отдельная вселенная по сравнению с master. Докажем это, вернувшись в master.

Переключитесь обратно на ветку master:

git checkout master

Вывод:

Switched to branch 'master'

Посмотрите на файлы:

ls

Где login.sh? Его нет!

Именно этого мы и хотели добиться. Файл login.sh не существует во временной шкале master. Ваш эксперимент надёжно изолирован.

Чтобы убедиться, что файл не потерян навсегда, снова переключитесь на ветку с новой возможностью:

git checkout feature_login
ls

Файл снова появился! При переключении между временными шкалами Git мгновенно заменяет файлы в вашем каталоге.

Итоги

В этой лабораторной работе вы изучили возможности ветвления:

  1. Безопасность: вы можете разрабатывать новые возможности в отдельной ветке (feature_login), не подвергая риску основной код (master).
  2. Переключение контекста: вы использовали git checkout, чтобы переходить между параллельными временными шкалами.
  3. Изоляция: вы убедились, что изменения, зафиксированные в одной ветке, не появляются в другой.

Именно так работают профессиональные команды. Разработчики создают отдельные ветки для каждой новой возможности или исправления ошибки, сохраняя основную кодовую базу чистой и стабильной.