Основные операции с ветками в Git

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

Введение

С возвращением, путешественник во времени! Сегодня мы поднимем ваши навыки управления временем на новый уровень с помощью веток Git!

Представьте, что вы можете создавать альтернативные вселенные для своего проекта, где можно экспериментировать с самыми смелыми идеями, не нарушая основную временную шкалу. Именно это позволяют делать ветки Git! Это своего рода параллельные измерения для вашего кода, в которых вы можете разрабатывать новые функции, исправлять ошибки или проводить безумные эксперименты без всякого страха.

К концу этой лабораторной работы вы станете мастером мультивселенной: научитесь создавать новые реальности (ветки), перемещаться между ними (checkout или switch), объединять их (merge) и даже удалять те миры, которые вам больше не нужны. Эти суперспособности необходимы любому разработчику-путешественнику, работаете ли вы в одиночку или в команде таких же межпространственных кодеров.

Готовы стать магом веток Git? Приступим!

Настройка центра управления мультивселенной

Для начала нам нужно создать центральный узел для всех наших альтернативных реальностей. Это будет наш основной Git-репозиторий.

  1. Откройте терминал. Это ваша панель управления для прыжков между измерениями.

  2. Перейдите в рабочее пространство проекта:

cd ~/project

Эта команда меняет текущий каталог на папку "project" в вашем домашнем каталоге. Если вы когда-нибудь запутаетесь в том, где находитесь, используйте команду pwd, чтобы вывести путь к текущей рабочей директории. Это полезный трюк, который стоит запомнить.

  1. Создадим новую папку для наших экспериментов с мультивселенной:
mkdir git-branch-lab
cd git-branch-lab

Команда mkdir создает новый каталог, а cd переносит нас внутрь него. Это дает нам чистый лист для работы. Представьте, что эта папка — комната управления нашей операцией по перемещению во времени.

  1. Теперь инициализируем наш узел (Git-репозиторий):
git init

Эта команда создает новый Git-репозиторий в текущем каталоге. Она подготавливает все необходимые служебные файлы, которые нужны Git для отслеживания проекта. Эти файлы скрыты в папке .git.

Вы должны увидеть сообщение вида:

Initialized empty Git repository in /home/labex/project/git-branch-lab/.git/

Поздравляем! Вы только что создали фундамент для бесконечных возможностей. На этой базе будут строиться все ваши дальнейшие приключения.

  1. Напишем записку самим себе в будущее, объясняющую, что это за место:
echo "## Git Branch Lab" > README.md
echo "This is my hub for multiversal Git branch experiments" >> README.md

Разберем эти команды:

  • Первая команда создает новый файл README.md и записывает в него строку "## Git Branch Lab". В языке Markdown символ '#' обозначает заголовок. Этот файл станет руководством пользователя для нашего узла мультивселенной.
  • Вторая команда добавляет еще одну строку в конец файла README.md. Символы '>>' означают "добавить в конец файла". Мы дополняем наше руководство деталями.

Если вам интересно взглянуть на результат, используйте команду cat README.md, чтобы прочитать содержимое файла.

  1. Теперь создадим нашу первую точку сохранения (коммит) в этой новой вселенной:
git add README.md
git commit -m "Initial commit: Create the multiverse hub"

Разберем подробнее:

  • git add README.md сообщает Git, что нужно начать отслеживать изменения в файле README.md. Это подготавливает файл к сохранению (индексация). Представьте, что это упаковка багажа перед путешествием.
  • git commit создает новый коммит (точку сохранения) с подготовленными изменениями. Это как моментальный снимок состояния нашей текущей вселенной.
  • Флаг -m позволяет добавить описание к коммиту прямо в команде. Всегда старайтесь писать понятные и информативные сообщения! Это пояснительная записка к вашему снимку.

Если вы не уверены, что именно подготовлено к сохранению, используйте git status. Это как проверка состояния оборудования перед прыжком.

Создание первой альтернативной реальности

Теперь, когда наша основная вселенная (ветка master) настроена, давайте создадим первую альтернативную реальность!

  1. Создайте новую ветку с именем feature-dimension:
git branch feature-dimension

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

Вы создали новую временную шкалу, но еще не вошли в нее. Давайте посмотрим на список всех доступных нам реальностей:

git branch

Вы увидите:

  feature-dimension
* master

Символ * показывает, в какой реальности вы находитесь сейчас. На данный момент вы все еще в основной вселенной (master). Ветка master — это ветка по умолчанию, которую Git создает при инициализации репозитория.

Совет: Нажмите q, чтобы выйти из списка веток и вернуться к вводу команд.

  1. Давайте совершим прыжок в новую реальность:
git checkout feature-dimension

Эта команда делает две вещи:

  1. Переключает вашу рабочую директорию на ветку feature-dimension.
  2. Обновляет файлы в папке так, чтобы они соответствовали состоянию ветки feature-dimension. Это как шаг через портал в новый мир.

Если вы снова введете git branch, то увидите:

* feature-dimension
  master

Звездочка переместилась — вы успешно перешли в новое измерение! Теперь вы работаете в этой альтернативной реальности.

Кстати, для достижения того же результата можно использовать команду git switch feature-dimension. Команда git switch появилась в Git версии 2.23 и предназначена специально для переключения веток, что делает процесс более интуитивным. Обе команды работают, но git switch считается более современным стандартом.

Не пугайтесь, если пока не видите изменений в файлах. Когда вы создаете новую ветку, она является точной копией той, в которой вы находились. Самое интересное начнется, когда мы станем вносить изменения!

Профессиональный совет: в новых версиях Git можно создать ветку и сразу перейти на нее одной командой: git checkout -b feature-dimension или git switch -c feature-dimension. Это как создать и активировать портал одним быстрым движением.

Если вы когда-нибудь забудете, в каком измерении (ветке) находитесь, просто введите git branch. Ветка с пометкой * — ваше текущее местоположение.

Формирование новой реальности

Теперь, когда мы находимся в новом измерении, давайте внесем изменения, которые будут существовать только здесь. Помните: что бы мы ни делали здесь, это не затронет основную вселенную, пока мы не решим их объединить. Это позволяет безопасно экспериментировать.

  1. Создадим новый артефакт в этой реальности:
echo "This is a powerful artifact from another dimension" > dimensional-artifact.txt

Эта команда создает файл dimensional-artifact.txt с текстом внутри. Символ > используется для создания нового файла (или перезаписи существующего). Этот артефакт уникален для нашей текущей реальности.

  1. Теперь зафиксируем этот артефакт в нашей временной шкале:
git add dimensional-artifact.txt
git commit -m "Create a powerful interdimensional artifact"

Эти команды уже знакомы вам по первому шагу. Мы просим Git отслеживать новый файл и создаем точку сохранения с описанием.

  1. Обновим нашу записку для будущего, добавив информацию об этой реальности:
echo "##### Feature Dimension" >> README.md
echo "We've discovered a powerful artifact in this reality" >> README.md

Мы добавляем новые строки в README.md. Символы >> дописывают текст в конец файла. Мы обновляем наше руководство, отражая открытия в новом измерении.

  1. Сохраним и эти изменения:
git add README.md
git commit -m "Document the discovery of the artifact"

Снова создаем точку сохранения, на этот раз для обновленного файла README.md.

Отличная работа! Теперь у вас есть изменения в альтернативной реальности. На данный момент они существуют только в ветке feature-dimension. Если вы вернетесь в ветку master, вы их там не обнаружите. Такая изоляция гарантирует, что эксперименты в одном мире не испортят порядок в других.

Чтобы увидеть разницу между текущей веткой и основной, можно использовать команду git diff master. Она покажет все изменения, сделанные в текущей реальности по сравнению с основной временной шкалой.

Слияние реальностей

Теперь, когда мы совершили удивительные открытия в альтернативной реальности, пришло время перенести их в нашу основную вселенную. Этот процесс называется слиянием (merge).

  1. Сначала вернемся в нашу основную реальность:
git checkout master

или

git switch master

Обе команды вернут нас на ветку master.

  • git checkout — классическая команда для переключения веток, существующая с первых дней Git.
  • git switch — более новая и понятная команда, появившаяся в версии 2.23.

Если вы сейчас посмотрите на свои файлы, то заметите, что межпространственный артефакт исчез! Не волнуйтесь, он в сохранности в другом измерении. Это доказывает, что изменения в ветках изолированы друг от друга до момента слияния.

  1. Теперь объединим альтернативную реальность с основной временной шкалой:
git merge feature-dimension

Эта команда приказывает Git взять все изменения из feature-dimension и применить их к master. Это как интеграция знаний из параллельного мира в нашу основную реальность.

Вы должны увидеть сообщение:

Updating <hash1>..<hash2>
Fast-forward
 README.md              | 2 ++
 dimensional-artifact.txt | 1 +
 2 files changed, 3 insertions(+)
 create mode 100644 dimensional-artifact.txt

Этот вывод показывает, какие файлы изменились и сколько строк было добавлено или удалено. "Fast-forward" означает, что Git просто передвинул указатель ветки master вперед до уровня feature-dimension, так как конфликтующих изменений не было. Это самый простой тип слияния.

Поздравляем! Вы только что объединили две реальности. Изменения из feature-dimension теперь стали частью основной вселенной. Наш артефакт и обновленная документация теперь доступны в ветке master.

  1. Убедимся, что артефакт успешно перенесся:
cat dimensional-artifact.txt
cat README.md

Эти команды выведут содержимое файлов. Вы увидите все правки, сделанные ранее.

Именно так разработчики внедряют новые функции в свои основные проекты! Это ключевая концепция Git: работа в изоляции и последующая интеграция готового результата.

Если вы хотите увидеть список всех веток, которые уже были объединены с текущей, используйте команду git branch --merged.

Закрытие пространственных порталов

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

  1. Закроем портал feature-dimension:
git branch -d feature-dimension

Флаг -d приказывает Git удалить ветку, но только в том случае, если она была полностью объединена с текущей. Это мера предосторожности, чтобы вы случайно не потеряли незавершенную работу.

Если вы попытаетесь удалить ветку, которая не была объединена, Git выдаст предупреждение. В таком случае, если вы абсолютно уверены в удалении, можно использовать флаг -D (заглавное): git branch -D feature-dimension. Это принудительное удаление без лишних вопросов. Будьте осторожны с этой силой!

  1. Проверим, какие реальности остались:
git branch

Теперь вы должны видеть только ветку master. Это означает, что портал в feature-dimension закрыт.

Удаление старых веток помогает поддерживать порядок в вашей мультивселенной. Это хорошая привычка — закрывать ненужные измерения, особенно в крупных проектах, чтобы не создавать путаницу.

Если вам когда-нибудь понадобится увидеть все ветки, включая удаленные (remote), используйте git branch -a.

Резюме

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

  1. Вы создали центр бесконечных возможностей (новый Git-репозиторий).
  2. Вы открыли портал в альтернативную реальность (создали новую ветку).
  3. Вы научились перемещаться между измерениями (переключать ветки через git checkout или git switch).
  4. Вы совершили важные открытия в параллельном мире (закоммитили изменения в отдельной ветке).
  5. Вы объединили две реальности, перенеся открытия в основную временную шкалу (выполнили слияние веток).
  6. И наконец, вы научились закрывать ненужные порталы (удалять ветки).

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

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

Удачных прыжков по измерениям, и пусть ваши слияния всегда проходят без конфликтов!