Git: Являются ли MERGING master в ветви объектов и REBASING ответвлением master в эквиваленте мастера?
Есть ли merging
освоить в ветви функций и rebasing
ветвь функции на главном сервере имеет одинаковый конечный результат в любой возможной ситуации, или я должен отдать предпочтение одному или другому в определенном контексте и почему? Я знаю, что слияние создает дополнительный коммит для лучшего понимания истории, но меня больше интересует фактический результат операции и вероятность ее успеха. Так есть ли реальная разница, или я мог бы выбрать любой подход, основанный на соглашении (или даже использовать их оба включительно)?
Кроме того, как часто мне нужно синхронизировать feature branch
с master
? Это хорошая практика для merge/rebase
каждый раз, когда я возвращаюсь к разработке конкретной функции, или я должен держать функцию изолированной от остальной архитектуры как можно дольше?
Как справиться с ситуацией, когда несколько функций сильно зависят друг от друга? Следует ли разрабатывать функции как отдельную ветвь объекта или как отдельную ветвь объекта, объединенную с общедоступной ветвью объекта? Допустим, в Spring framework
многие конфигурации и слои зависят друг от друга. Каков общий рабочий процесс для поддержания целостности и синхронизации?
2 ответа
И слияние, и перебазирование решают одну и ту же проблему совершенно по-разному. В отличие от перебазирования, слияние неразрушающее. Однако, пока вы следуете Золотому правилу перебазирования, все будет работать нормально, и вы можете наслаждаться хорошей историей коммитов. Правило "не используйте ребазинг с публичными ветками".
Кроме того, как часто мне нужно синхронизировать ветку объектов с мастером?
Это в основном дело вкуса. Как объясняется в Pro Git, существуют различные ветвящиеся рабочие процессы, из которых можно выбирать.
Перебазирование и слияние не равны во всех ситуациях, так как, когда вы перебазируете на master, вы фактически делаете новые коммиты поверх master, которые будут иметь другой идентификатор и содержимое. Вот почему важно не перебазировать публичные ветки. Тем не менее, перебазировка может дать вам хорошую чистую историю.
Что касается раздела ветвления вопроса: кажется, что вы ищете модель ветвления. Одной из самых популярных моделей ветвления является git flow, который использует модель слияния.
http://nvie.com/posts/a-successful-git-branching-model/
Суть модели git flow заключается в использовании веток master, release, development и feature (среди прочих) для организации состояния, в котором находится ваш код. С этой моделью должно быть легко определить, когда объединить, как это произойдет. быть на определенных этапах, например: функция завершена или вы собираетесь сделать следующий выпуск.