2016-03-24 1 views
0

У меня есть филиалы alpha, beta, и master. У меня также есть филиалы feature_a, feature_b, feature_c, и feature_d. я тогда:Как объединить определенные ветки/частичные коммиты в git?

  1. Merge feature_a в alpha
  2. Слияние feature_b в alpha
  3. Слияние feature_c в alpha
  4. Слияние feature_d в alpha

Есть проблемы с feature_bfeature_d (или ре рапс, они пропустили крайний срок и все еще находятся в процессе тестирования), но остальные готовы перейти к ветке beta.

Как бы я быть в состоянии объединить только выбрать «ветви» в beta ветви от alpha, так что только feature_a и feature_c могут быть объединены до? Будет ли история и происхождение неповрежденными (при условии, что ветви признаков будут обрезаны или удалены)?

Я угадываю что-то в степени git merge beta feature_c...alpha, git merge beta feature_a...alpha (эти команды не сработают, но это теория, за которой я пытался до сих пор).

+0

Предполагая, что существует способ сделать такое частичное слияние, планируете ли вы позже включить функции feature_b и 'feature_d'? –

+0

Я точно не знаю, где ваша концепция того, что делает git при слиянии, удалилась от рельсов, но я думаю, что это так. См. Http://stackoverflow.com/a/35954651/1256452 для фона (это не ответ, просто какое-то фоновое чтение, возможно, вытащит вас из сорняков, вернемся к дорожкам). – torek

+0

Чтобы добавить к диалогу Torek, в Git вы обычно не переносите часть ветки в другую ветвь, поэтому нет реальной концепции частичного слияния. Есть 'git cherry-pick' и' git rebase', которые будут функционально давать вам то, что вы хотите, но я подозреваю, что сначала должен пересмотреть ваш рабочий процесс. –

ответ

1

Если вы хотите, чтобы объединить несколько ветвей, можно просто объединить только те ветви:

git merge beta feature_a feature_a 

Теперь, если вы хотите объединить только те ветви в государстве, где они были, когда вы начали выпуск (т.е.: когда вы объединили их в alpha), вы можете пометить их в момент слияния с тегами, например feature_a_release-n и т. д.; так, чтобы слиться в beta вы могли бы сделать:

git merge beta feature_a_release-n feature_b_release-n 

Мы также можем думать о альтернативы, потому что вы могли бы по праву действительно хотите объединить функции между собой для того, чтобы испытать их все вместе, прежде чем продолжить к бета-версии. В этом случае вместо ветви alpha вы можете сделать ветку на выпуск, например: alpha-release-n. И если вы заметили проблему с ветвью функций после создания этой ветви релиза, вы можете просто создать новую, скажем alpha-release-n.2, которая не включает ветку un-wanted.


Final субъективны, хотя: этот рабочий процесс, с функцией филиала в команде, был один, используемый моей компании несколько лет назад. С тех пор R & D более чем удвоился, и мы обнаружили некоторые недостатки в этом рабочем процессе. (например, потому что поздняя интеграция может выявить конфликты через несколько дней, что является довольно поздней обратной связью).

Не вдаваясь в подробности, после того, как мы сосредоточим усилия на создании надежных тестов без регрессии по всей нашей кодовой базе, мы теперь совершаем только master, и мы считаем, что он должен иметь возможность входить в производство в любое время ,