Git branch
В этом документе подробно описывается команда git branch
и рассматривается общая модель ветвления в Git. Возможность ветвления доступна в большинстве современных систем контроля версий. Однако эта операция в ряде систем может быть довольно затратной как по времени, так и по объему дискового пространства. В Git ветки — это элемент повседневного процесса разработки. По сути, они представляют собой указатель на снимок изменений. Если нужно добавить новую возможность или исправить баг (незначительный или серьезный), вы создаете новую ветку, в которой будут размещаться эти изменения. Объединить нестабильный код с основной базой кода становится сложнее, к тому же перед слиянием с основной веткой можно очистить историю работы над возможностью.
В этом документе подробно описывается команда git branch
и рассматривается общая модель ветвления в Git. Возможность ветвления доступна в большинстве современных систем контроля версий. Однако эта операция в ряде систем может быть довольно затратной как по времени, так и по объему дискового пространства. В Git ветки — это элемент повседневного процесса разработки. По сути, они представляют собой указатель на снимок изменений. Если нужно добавить новую возможность или исправить баг (незначительный или серьезный), вы создаете новую ветку, в которой будут размещаться эти изменения. Объединить нестабильный код с основной базой кода становится сложнее, к тому же перед слиянием с основной веткой можно очистить историю работы над возможностью.
Связанные материалы
Расширенный журнал Git
СМ. РЕШЕНИЕ
Изучите 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.