Ветка#
Ветка (branch) представляет собой изолированную линию разработки в системе контроля версий. Ее основное назначение —
обеспечить возможность параллельного внесения и тестирования изменений без воздействия на стабильное состояние основного
кода. Ниже приведены ключевые аспекты использования веток.
Изоляция изменений. Ветки обеспечивают изоляцию процессов разработки. Все изменения, вносимые в рамках отдельной ветки, не оказывают влияния на другие ветки до момента выполнения операции слияния (
merge). Это позволяет вести разработку и экспериментирование, не затрагивая стабильную версию проекта, расположенную в основной ветке.Организация параллельной разработки. Использование веток является стандартным методом для организации параллельной работы над несколькими функциональностями или исправлениями. Каждая задача может выполняться в собственной ветке, что исключает конфликты между усилиями различных разработчиков на ранних стадиях и позволяет независимо управлять жизненным циклом каждого изменения.
Правила наименования веток#
Основные ветки используют фиксированные имена: main, master, release-candidate, release, dev и другие.
Ветки для задач именуются по формату: Group/[SubGroup]/Label/Some-name-[Issue].
Group - обозначение группы веток:
wip(Works in progress) - для долгосрочных задач с неопределенным сроком завершения.
Пример:wip/feat/config-manager-203636t.iss(Issue) - для краткосрочных веток, связанных с конкретной задачей.
Пример:iss/fix/db-generator-update-class-exist-field-210782tjunk- для экспериментальных разработок. Подлежит обязательному удалению после завершения экспериментов.
Пример:junk/chore/update-sbt-versionusr/<user_name>- для персональных экспериментальных веток.
Пример:usr/ya.ryazanov/chore/java-21-support
[SubGroup] - опциональная подгруппа.
Пример: usr/ya.ryazanov/wip/java-21-support, где wip является подгруппой.
Label - тип изменений в ветке:
feat- реализация нового функционала.fix- исправление ошибок.hotfix- оперативное исправление критических ошибок.test- добавление тестов.refactor- рефакторинг кода без изменения функциональности.docs- обновление документации.chore- прочие изменения, не подпадающие под указанные категории.
Some-name-[Issue] - краткое описание и номер задачи.
Совет
Наименование должно быть на английском языке и в нижнем регистре, что бы избежать конфликтов при работе на разных операционных системах.
Слияние веток#
Слияние веток - это процесс интеграции изменений из одной ветки в другую, позволяющий объединить параллельно развивающиеся линии разработки.
Типы слияния#
Fast-Forward слияние#
Происходит, когда целевая ветка не содержит изменений, отсутствующих в сливаемой ветке. Git просто перемещает указатель целевой ветки вперёд.
Условия:
Отсутствуют расхождения в истории.
Целевая ветка является прямым предком сливаемой.
Преимущества:
Сохраняется линейная история.
Не создаётся дополнительных коммитов.
Recursive слияние (трехстороннее)#
Применяется, когда обе ветки содержали изменения после момента расхождения. Git создаёт новый коммит слияния, объединяющий изменения.
Характеристики:
Создаётся коммит слияния с двумя родителями.
Сохраняется полная история изменений.
Требует разрешения конфликтов при необходимости.
Слияние с отклонением fast-forward (–no-ff)#
Принудительное создание коммита слияния даже когда возможно fast-forward слияние.
Применение:
Сохранение информации о факте слияния в истории.
Улучшение читаемости истории проекта.
Отслеживание функциональных веток.
Процесс слияния#
Определение базового коммита - поиск общего предка веток.
Анализ различий - сравнение изменений в обеих ветках.
Автоматическое объединение - применение непротиворечивых изменений.
Разрешение конфликтов - ручное устранение противоречий (при необходимости).
Создание коммита слияния - фиксация результата объединения.
Стратегии слияния#
ort(По умолчанию) - оптимизированная стратегия для сложных слияний.resolve- трёхстороннее слияние с разрешением конфликтов.octopus- для слияния более двух веток одновременно.
Лучшие практики#
Регулярное слияние изменений из основной ветки в feature-ветки.
Использование
--no-ffдля сохранения информации о слиянии feature-веток.Тщательное тестирование после слияния.
Использование Merge Request для код-ревью перед слиянием.
Команды слияния#
# Слияние с fast-forward (по умолчанию)
git merge feature-branch
# Слияние с созданием коммита слияния
git merge feature-branch --no-ff
# Прерывание слияния в случае конфликтов
git merge --abort