Тематические ветки

А вот такая вещь, как тематические ветки, полезна вне зависимости от величины проекта.

Тематической называется временная ветка, создаваемая и используемая для работы над конкретной функциональной возможностью или решения сопутствующих задач. Скорее всего, при работе с другими системами контроля версий вы никогда ничего подобного не делали, так как там создание и слияние веток это затратные операции. Но в Git'е принято много раз в день создавать ветки, работать с ними, сливать их и удалять.

Пример тематических веток вы видели в предыдущем разделе, когда мы создавали ветки iss53 и hotfix. Для каждой из них было выполнено несколько коммитов, после чего сразу же после слияния с основной веткой они были удалены. Такая техника позволяет быстро и радикально осуществлять переключения контекста. Работа разделена по уровням, и все изменения в конкретной ветке относятся к определенной теме, а значит, во время просмотра кода проще понять, что и где было сделано. Ветку с внесенными в нее изменениями можно хранить минуты, дни или даже месяцы, и выполнять ее слияние, только когда это действительно требуется, независимо от порядка создания веток в рамках проекта и порядка работы с ними.

Предположим, мы работаем в ветке master, ответвляемся для решения попутной проблемы (feature/91), некоторое время занимаемся ею, затем создаем ветку, чтобы попробовать решить эту задачу другим способом (feature/91v2), возвращаемся в ветку master, выполняем там некие действия и создаем новую ветку для действий, в результате которых не уверены (ветка dumbidea). Результирующая история коммитов будет выглядеть примерно так.

Предположим, вам больше нравится второй вариант решения задачи (feature/91v2), а ветку dumbidea вы показали коллегам, и оказалось, что там содержится гениальная идея. Фактически вы можете удалить ветку feature/91 (потеряв коммиты 834b785 и ac529c7) и слить две другие ветки.

После этого история будет выглядеть так.

Более подробно допустимые варианты рабочих схем для проектов рассматриваются в разделе Групповая разработка в Git'е, поэтому перед выбором схемы обязательно прочитайте эту главу.

Важно помнить, что во время всех этих манипуляций ветки полностью локальны. Ветвления и слияния выполняются только в репозитории Git'а, связь с сервером не требуется.