Теперь, когда вы познакомились с основами ветвления и слияния, что вам делать с ветками дальше? В этом разделе мы рассмотрим некоторые стандартные приёмы работы, которые становятся возможными, благодаря лёгкому осуществлению ветвления. И вы сможете выбрать, включить ли вам какие-то из них в свой цикл разработки.
Долгоживущие ветки
Так как Git использует простое трехходовое слияние, сливать одну ветку с другой несколько в течение большого промежутка времени достаточно просто. Это значит вы можете иметь несколько веток, которые всегда открыты и которые вы используете для разных стадий вашего цикла разработки; вы можете регулярно сливать одну из них с другой. Много разработчиков Git-а ведут свой рабочий процесс в соответствии с этой идеей. Например, стабильный код располагается только в веткеmaster
― единственный стабильный код, который был или будет выпущен. Они имеют другую параллельную ветку, называемую develop
(разработка) или next
(следующая), из которой они работают или используют для проверки на стабильность ― она не обязательно всегда стабильна, но когда она принимает стабильное состояние, можно слить её в master
. Она используется чтобы включать в себя изменения от коротких веток (таких как ветка iss53
, с которой вы имели дело ранее) когда они готовы, чтобы удостовериться, что они успешно проходят все тесты и не вызывают ошибок.
В действительности же, мы говорим об указателях, передвигающихся вверх по линии коммитов, которые вы делаете. Стабильные ветки далеко внизу линии вашей истории коммитов, наиболее свежие ветки находятся ближе к верхушке этой линии (смотри Рисунок 3-18).
Рисунок 3-18. Более стабильные ветки как правило находятся дальше в истории коммитов
Рисунок 3-19. Может быть полезным думать о ветках как о силосных башнях
proposed
или pu
(proposed updates ― предлагаемые изменения), которые включают в себя ветки, не готовые для перехода в ветку next
или master
. Идея такова, что ваши ветки находятся на разных уровнях стабильности; когда они достигают более высокого уровня стабильности, они сливаются с веткой, стоящей на более высоком уровне. Опять-таки, не обязательно иметь долгоживущие ветки, но часто это очень полезно, особенно когда вы имеете дело с очень большими и сложными проектами.
Тематические ветки
Тематические ветки, однако, полезны в проектах любого размера. Тематическая ветка ― недолговечная ветка, которую вы создаете и используете для некоторой отдельной возможности или вспомогательной работы. Это то, чего вы вероятно никогда не делали с системами управления версиями раньше, так как создание и слияние веток обычно слишком затратно. Но в Git принято создавать ветки, работать над ними, объединять и удалять их по несколько раз в день. Вы видели подобное в последнем разделе, где вы создавали веткиiss53 и hotfix
. Вы сделали несколько коммитов на этих ветках и удалили их сразу после объединения с вашей основной веткой. Такая техника позволяет вам быстро и полноценно переключать контекст. Когда все изменения в данной ветке относятся к определённой теме, достаточно просто отслеживать, что происходило во время работы с кодом. Вы можете сохранить там изменения на несколько минут, дней или месяцев, а затем, когда они готовы, слить их с основной веткой, независимо от порядка, в котором их создавали или работали над ними.
Рассмотрим пример, когда выполняется некоторая работа (в ветке master
), делается ответвление для решения проблемы (iss91
), выполняется немного работы на ней, делается ответвление второй ветки для другого пути решения той же задачи (iss91v2
), осуществляется переход назад на вашу основную ветку (master
) и выполнение работы на ней, затем делается ответвление от неё для выполнения чего-то, в чём вы не уверены, что это хорошая идея (ветка dumbidea
). Ваша история коммитов будет выглядеть примерно так как на Рисунке 3-20.
Рисунок 3-20. История коммитов с несколькими тематическими ветками
Теперь представим, вы решили, что вам больше нравится второе решение для вашей задачи (iss91v2
); и вы показываете ветку dumbidea
вашим коллегам и оказывается, что она просто гениальна. Так что вы можете выбросить оригинальную ветку iss91
(теряя при этом коммиты C5
и C6
) и слить две другие. Тогда ваша история будет выглядеть как на Рисунке 3-21.
Рисунок 3-21. Ваша история после слияния dumbidea
и iss91v2
Важно запомнить, что когда вы выполняете все эти действия, ветки являются полностью локальными. Когда вы выполняете ветвление и слияние, всё происходит только в вашем репозитории ― связь с сервером не осуществляется.
Pro Git