Использование веток

Git branch


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

Обучающий материал по Git: команда git branch

На схеме выше показан репозиторий с двумя отдельными направлениями разработки: для небольшой возможности и для более масштабной. Ведение разработки в отдельных ветках не только позволяет работать над ними параллельно, но и предотвращает попадание сомнительного кода в главную ветку (master).

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

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

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

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

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

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

git branch

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

git branch <branch>

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

git branch -d <ветка>

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

git branch -D <branch>

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

git branch -m <branch>

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

git branch -a

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

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

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

Обучающий материал по Git: репозиторий без веток

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

git branch crazy-experiment

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

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

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

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

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

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Добавление удаленного репозитория в конфигурацию локального репозитория
$ git push <new-remote-repo> crazy-experiment~
# Отправка ветки crazy-experiment в новый удаленный репозиторий 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 см. на наших страницах, где подробно обсуждаются:
рабочий процесс с функциональными ветками
, рабочий процесс GitFlow и рабочий процесс с форками

Готовы попробовать ветвление?

Ознакомьтесь с этим интерактивным обучающим руководством.

Начните прямо сейчас