Урок #4 Git Ветвление - Создание новой ветки репозитория

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

До сих пор мы работали с одной линией истории — основной веткой (обычно она называется master или main). Ветка — это независимая "линия разработки" репозитория: свои коммиты, своя версия файлов.

Ветки нужны, чтобы работать над несколькими вариантами проекта параллельно и не мешать друг другу, например:

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

Как узнать, на какой ветке вы находитесь

Список всех веток показывает команда:

git branch

Текущая ветка отмечена звёздочкой:

* master

(Как и в уроке #2: имя может быть master или main — в зависимости от версии git и настроек.)

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

Чтобы создать новую ветку (ответвиться от той, на которой вы сейчас находитесь), используйте команду git checkout с флагом -b:

git checkout -b имяНовойВетки

Например:

git checkout -b feature/add-greeting

Git сразу переключит вас на новую ветку и сообщит об этом:

Switched to a new branch 'feature/add-greeting'

После этого можно, как обычно, выполнить команду:

git status

— в первой строке ответа будет видно, что вы теперь на новой ветке: On branch feature/add-greeting.

Есть и отдельная команда, которая только создаёт ветку, но не переключается на неё:

git branch имяНовойВетки

Но на практике удобнее вариант с checkout -b: создать и сразу оказаться в новой ветке.

Как называть ветки: латиницей, без пробелов, коротко и осмысленно — обычно через дефис или слэш указывают суть изменения, например feature/add-search, fix/wrong-sum.

Переключаемся между ветками

Вернуться на уже существующую ветку можно той же командой git checkout, но без флага -b:

git checkout master

В новых версиях git для переключения есть и отдельная команда:

git switch имяВетки

(а git switch -c имяВетки — создать и переключиться, как checkout -b).

Практика: изменения в ветке не видны в основной

Практика этого раздела опирается на урок #2, где мы создали в репозитории файл hello.txt и научились добавлять изменения и фиксировать их. Если вы ещё не выполняли практику оттуда — сделайте это, а затем возвращайтесь.

Итак, продолжим работу с файлом hello.txt. Создадим ветку для эксперимента и сделаем в ней коммит:

git checkout -b experiment
echo "Новая идея" >> hello.txt
git add hello.txt
git commit -m "Пробуем новую идею"

А теперь вернёмся на основную ветку и посмотрим на файл:

git checkout master
cat hello.txt        # строки "Новая идея" здесь нет!

Вернёмся обратно в экспериментальную ветку:

git checkout experiment
cat hello.txt        # а здесь строка на месте

Вот и вся суть ветвления: каждая ветка живёт своей жизнью, и изменения в одной из них не затрагивают остальные. После создания ветки можно вносить изменения в файлы репозитория и фиксировать их как обычно (см. урок #2), а когда ветка будет готова — публиковать её во внешний репозиторий (см. урок #3). Объединение изменений из двух веток (слияние, merge) — тема отдельного урока.

Как ветки выглядят в истории

Увидеть ветвление прямо в истории можно так:

git log --oneline --graph

Коммит ответвления и коммит основной ветки будут показаны как расходящиеся "линии" истории.

Итого

  • git branch — список веток (звёздочка — где вы сейчас), git branch имя — только создать ветку;
  • git checkout -b имя — создать ветку и сразу переключиться на неё;
  • git checkout имя (или git switch имя) — переключиться на существующую ветку;
  • изменения, сделанные в одной ветке, не видны в других — пока ветки не объединены.

Key Words for FKN + antitotal forum (CS VSU):