Close

Git branch

В этом документе подробно описывается команда git branch и рассматривается общая модель ветвления в Git. Возможность ветвления доступна в большинстве современных систем контроля версий. Однако эта операция в ряде систем может быть довольно затратной как по времени, так и по объему дискового пространства. В Git ветки — это элемент повседневного процесса разработки. По сути, они представляют собой указатель на снимок изменений. Если нужно добавить новую возможность или исправить баг (незначительный или серьезный), вы создаете новую ветку, в которой будут размещаться эти изменения. Объединить нестабильный код с основной базой кода становится сложнее, к тому же перед слиянием с основной веткой можно очистить историю работы над возможностью.


В этом документе подробно описывается команда git branch и рассматривается общая модель ветвления в Git. Возможность ветвления доступна в большинстве современных систем контроля версий. Однако эта операция в ряде систем может быть довольно затратной как по времени, так и по объему дискового пространства. В Git ветки — это элемент повседневного процесса разработки. По сути, они представляют собой указатель на снимок изменений. Если нужно добавить новую возможность или исправить баг (незначительный или серьезный), вы создаете новую ветку, в которой будут размещаться эти изменения. Объединить нестабильный код с основной базой кода становится сложнее, к тому же перед слиянием с основной веткой можно очистить историю работы над возможностью.

git branch
Окно консоли
Связанные материалы

Расширенный журнал Git

Логотип Bitbucket
СМ. РЕШЕНИЕ

Изучите Git с помощью Bitbucket Cloud

На представленной выше схеме показан репозиторий с двумя отдельными направлениями разработки: для небольшой функциональной возможности и для более масштабной. Разработка в отдельных ветках не только позволяет работать над ними параллельно, но и предотвращает попадание сомнительного кода в главную ветку main.

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

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

Порядок действий


Ветка представляет собой отдельное направление разработки. Ветки выступают в качестве абстрактного представления для процесса редактирования/индексации/коммита. Можно рассматривать их как способ запросить новый рабочий каталог, раздел проиндексированных файлов и историю проекта. Новые коммиты записываются в историю текущей ветки, что приводит к образованию развилки в истории проекта.

Команда git branch позволяет создавать, просматривать, переименовывать и удалять ветки. Она не дает возможности переключаться между ветками или выполнять слияние разветвленной истории. Именно поэтому команда git branch тесно связана с git checkout и git merge.

Распространенные опции


git branch

Отображение списка веток в репозитории. Это синоним команды git branch --list.

git branch <branch>

Создание новой ветки с именем <ветка>. Эта команда не выполняет переключение на эту новую ветку.

git branch -d <branch>

Удаление указанной ветки. Это «безопасная» операция, поскольку Git не позволит удалить ветку, если в ней есть неслитые изменения.

git branch -D <branch>

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

git branch -m <branch>

Изменение имени текущей ветки на <ветка>.

git branch -a

Вывод списка всех удаленных веток.

Создание веток


Важно понимать, что ветки — это просто указатели на коммиты. Когда вы создаете ветку, Git просто создает новый указатель. Репозиторий при этом никак не изменяется. Допустим, вы начинаете работать с репозиторием, который выглядит так:

Репозиторий без веток

Затем вы создаете новую ветку с помощью следующей команды.

git branch crazy-experiment

История репозитория остается неизменной. Все, что вы получаете, — это новый указатель на текущий коммит:

Создать ветку

Обратите внимание: эта команда только создает новую ветку. Чтобы добавить в эту ветку коммиты, необходимо выбрать ее с помощью команды git checkout, а затем использовать стандартные команды git add и git commit.

Создание удаленных веток


До сих пор все эти примеры демонстрировали работу с локальными ветками. Команда git branch работает и с удаленными ветками. Для выполнения операций на удаленных ветках сначала необходимо настроить удаленный репозиторий и добавить его в конфигурацию локального репозитория.

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo

Эта команда отправит копию локальной ветки crazy-experiment в удаленный репозиторий <remote>.

Удаление веток


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

git branch -d crazy-experiment

Однако, если ветка не была слита, указанная выше команда выдаст сообщение об ошибке:

error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

Это защищает от потери доступа ко всему направлению разработки. Если вы действительно хотите удалить ветку (например, если эксперимент оказался неудачным), используйте флаг -D (с прописной буквой):

git branch -D crazy-experiment

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

Предыдущие команды удаляют локальную копию ветки, но ветка может сохраниться в удаленных репозиториях. Для удаления ветки из удаленного репозитория выполните следующую команду.

git push origin --delete crazy-experiment

или

git push origin :crazy-experiment

Эта команда отправит удаленному репозиторию сигнал на удаление ветки crazy-experiment.

Резюме


В этом документе мы рассмотрели ветвление в Git и команду git branch. Команду git branch главным образом используют для создания, просмотра, переименования и удаления веток. Для дальнейшей работы с полученными ветками обычно используются другие команды, например git checkout. Подробнее об использовании git checkout в операциях с ветками, в том числе их переключения и слияния, см. на странице git checkout.

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


Поделитесь этой статьей
Следующая тема

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Люди сотрудничают друг с другом, используя стену со множеством инструментов

Блог Bitbucket

Рисунок: DevOps

Образовательные программы DevOps

Демонстрация функций в демо-зале с участием экспертов Atlassian

Как инструмент Bitbucket Cloud работает с Atlassian Open DevOps

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up