Одна из самых мощных функций Git - это возможность легко создавать и объединять ветки. Распределенный характер Git побуждает пользователей часто создавать новые ветки и регулярно объединять их в рамках процесса разработки. Это существенно улучшает рабочий процесс разработки для большинства проектов, поощряя более мелкие, более сфокусированные и детализированные коммиты.
В устаревших системах контроля версий (таких как CVS) сложность слияния ограничивалась только опытными пользователями. Другие современные, но централизованные системы контроля версий, такие как Subversion, требуют, чтобы коммиты выполнялись в центральном репозитории, поэтому гибкий рабочий процесс с локальным ветвлением и слиянием нетипичен.
Обычно используемый рабочий процесс ветвления в Git - это создание новой ветки кода для каждой новой функции, исправления ошибок или улучшения. Они называются функциональными ветвями. Каждая ветвь разделяет коммиты, относящиеся к определенной функции. Как только новая функция будет завершена - то есть набор изменений был зафиксирован в ветви функции - она готова к слиянию обратно в основную ветвь (или другую ветвь основной строки кода в зависимости от используемого рабочего процесса).
Команда git branch
используется для вывода списка всех существующих
веток в репозитории. Звездочка появится рядом с активной в данный момент
веткой.
$ git branch
* master
Чтобы создать новую ветку, мы можем использовать команду
git branch new-branch
. Это создаст новую ветку, отражающую коммиты
текущей активной ветки.
$ git branch new-branch
$ git branch
* master
new-branch
Вкратце, имейте в виду, что за кулисами Git фактически не создает новый набор коммитов для представления новой ветки. В Git ветка - это просто тег. Это метка, которую мы можем использовать для ссылки на конкретную строку коммитов. Было бы неэффективно дублировать набор коммитов за кулисами, поэтому Git позволяет нам создавать несколько расходящихся наборов коммитов из одной базы.
На этом этапе мы создали новую ветку, но по-прежнему находимся в
исходной ветке. Чтобы начать работу над новой веткой, нам сначала нужно
запустить команду git checkout new-branch
. Это изменит активную ветвь
на новую ветку.
$ git checkout new-branch
Switched to branch ‘new-branch'
$ git branch
master
* new-branch
На этом этапе можно сделать коммиты в новой ветке для реализации новой функции. Как только функция будет завершена, ветвь может быть снова объединена с основной ветвью кода (обычно главной).
Сначала мы запускаем git checkout master
чтобы снова изменить активную
ветку на master. Затем мы запускаем команду git merge new-branch
чтобы
объединить новую функцию с основной веткой. Обратите внимание, что
git merge
объединяет указанную ветку в текущую активную ветвь. Итак,
нам нужно быть в той ветке, в которую мы сливаемся .
# ...develop some code...
$ git add –A
$ git commit –m "Some commit message"
$ git checkout master
Switched to branch 'master'
$ git merge new-branch
Если все пойдет хорошо, наша работа сделана. Коммиты новой функции теперь появляются в главной ветке. Однако возможно, что Git не сможет завершить слияние из-за изменения конфликта в исходной ветке. Это называется конфликтом слияния и будет обсуждаться в отдельной статье.
Подводя итог, вот команды для создания новой ветки, выполнения некоторых коммитов и слияния ее обратно в мастер:
$ git checkout master
$ git branch new-branch
$ git checkout new-branch
# ...develop some code...
$ git add –A
$ git commit –m "Some commit message"
$ git checkout master
$ git merge new-branch
об авторе
Эта статья была написана Якобом Стопаком, консультантом по программному обеспечению и разработчиком, стремящимся помочь другим улучшить свою жизнь с помощью кода. Джейкоб является создателем Initial Commit - сайта, посвященного тому, чтобы помочь любознательным разработчикам узнать, как написаны их любимые программы. Его избранный проект помогает людям изучать Git на уровне кода.