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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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

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

Вы готовы стать волшебником веток Git? Погрузимся!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git(("Git")) -.-> git/SetupandConfigGroup(["Setup and Config"]) git/SetupandConfigGroup -.-> git/init("Initialize Repo") git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/branch("Handle Branches") git/BranchManagementGroup -.-> git/checkout("Switch Branches") git/BranchManagementGroup -.-> git/merge("Merge Histories") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/init -.-> lab-385163{{"Основные операции с ветками Git"}} git/add -.-> lab-385163{{"Основные операции с ветками Git"}} git/commit -.-> lab-385163{{"Основные операции с ветками Git"}} git/branch -.-> lab-385163{{"Основные операции с ветками Git"}} git/checkout -.-> lab-385163{{"Основные операции с ветками Git"}} git/merge -.-> lab-385163{{"Основные операции с ветками Git"}} git/log -.-> lab-385163{{"Основные операции с ветками Git"}} end

Настройка вашего мультивселенного хаба

Сначала нам нужно создать центральный хаб для всех наших альтернативных реальностей. Это будет наш основной репозиторий 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. Это как создать и пройти через портал одним стремительным движением! Использование -b с git checkout или -c с git switch объединяет создание ветки и переключение в одну стадию.

Если вы когда-либо заблудитесь и не сможете вспомнить, в каком измерении (ветке) вы находитесь, просто запустите 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"

Эти команды должны быть вам знакомы из Шага 1. Мы сообщаем 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, вы не увидите этих изменений там. Это разделение гарантирует, что наши эксперименты в одной реальности не влияют на другие.

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

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

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

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

или

git switch master

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

  • git checkout - это более старая команда для переключения между ветками. Она существует с самых ранних дней Git и по-прежнему поддерживается.
  • git switch - это новая команда, введенная в Git 2.23. Она разработана для более интуитивного и легкого понимания.

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

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

  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, потому что не было конфликтных изменений. Быстрое продвижение (fast - forward merge) - это самый простой тип слияния, которое происходит, когда ветка, в которую вы объединяете, не изменялась с момента создания ветки, из которой вы объединяете.

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

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

Эти команды отобразят содержимое файлов. Вы должны увидеть изменения, которые мы внесли в ветке feature-dimension. Эти команды подтверждают, что слияние прошло успешно.

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

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

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

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

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

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

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

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

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

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

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

Итог

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

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

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

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

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