слияние с ветвями, не имеет значения, в какую вы сливаетесь? - PullRequest
18 голосов
/ 04 октября 2011

git версия 1.7.5.4

У меня около 5 веток. Все из той же начальной ветки.

Я хочу объединить 2 ветви. скажем, Branch1 и Branch2. Эти ветви имеют много различий.

В настоящее время я работаю над Branch1 и только что понял, что в Branch2 есть некоторые изменения, которые я хочу внести в Branch1.

Каков наилучший способ слияния?

checkout branch2 and merge branch1

или

checkout branch1 and merge branch2

Или не имеет значения, какую ветку нужно оформить, чтобы объединить с другой веткой?

Ответы [ 2 ]

17 голосов
/ 04 октября 2011

Обычно не имеет значения, являются ли обе ветви ветвями тем или функций.

Однако, если у вас есть ветка интеграции или ветвь, которая отмечает то, что было опубликовано, вы определенно хотите использовать долгоживую ветвь интеграции.как тот, который извлечен, и объединить другой в него.

Причина этого заключается в том, что коммит слияния пометит первый родительский коммит как тот, который идет из главной ветви.Ваша древовидная спецификация для истории для этой ветви теперь проста.Чтобы найти коммит, который был четвертым последним в этой ветке, вы просто

git show head~4

Если вы слились с другой веткой где-то посередине, вам пришлось бы явно переключаться на второй коммит, где бы ни происходило слияниедругой путь:

git show head^^2^^

Это может вызвать проблемы с основными ветвями по другой причине;объединение их в разделы темы или функции называется «обратным объединением» и не является хорошей идеей.Я помню, как Линус Торвальдс взорвал свою вершину, когда авторы сделали это.Это не позволило бы ему четко разделить, какие функции он хотел бы объединить для основной ревизии, поскольку ветви функций привели бы к старому тестовому слиянию, включавшему в себя вещи, которые он больше не хочет.

Так что, в конце концов, еслиодна ветвь более важна и представляет собой нечто большее, чем просто функция, проверьте ее и объедините оттуда.Вы сможете легко просматривать историю, поскольку знаете, что ее первый родитель всегда находится там, где раньше была эта ветвь.Если вы этого не сделаете, вам придется полагаться на чтение сообщений фиксации слияния, и это не так весело.:)

Я написал статью о BpF, в которой показан строгий метод организации ветвей: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

3 голосов
/ 04 октября 2011

Я предполагаю, что вы действительно хотите объединить всю ветвь, а не просто набрать лишний коммит.Кроме того, то, что я говорю ниже, в значительной степени основано на этом очень полезном сообщении в блоге Джунио С. Хамано , сопровождающего git, которое я настоятельно рекомендую прочитать, если вы хотите узнать больше о философии ветвления.

К сожалению, в вашем вопросе на самом деле недостаточно информации, чтобы дать здравый совет по этому поводу, потому что вопрос критически зависит от цели каждой ветви.Например, в одном распространенном сценарии может существовать ветвь master, из которой всегда можно создать стабильный выпуск.Когда кто-то хочет добавить новую функцию в программное обеспечение, он может создать ветку темы с именем master под названием awesome-feature, над которой он работает, возможно, перебазировать, тщательно протестировать и так далее.Когда все довольны этой ветвью, тогда имеет смысл только слить awesome-feature в master, а не наоборот.(С другой стороны, это примерно означает, что все в master помогает реализовать «удивительную особенность», для которой предназначена ветка темы.) Однако вы можете только сказать, какой способ обхода верен, потому что мы знаем назначение каждой ветки..

В git ветвление и слияние настолько просты, что поддерживают множество различных рабочих процессов, от сильно структурированных до довольно простых , до полностью неструктурированных.Под «полностью неструктурированным» я подразумеваю, что существует несколько различных ветвей разработки, и люди объединяются между собой так, как кажется, включают функции, которые им нужны в конкретной отрасли - если вы находитесь в такой ситуации, где нет четкоопределенная цель для каждой ветви, может не иметь значения, слились ли вы branch1 в branch2 или наоборот.Тем не менее, я считаю, что гораздо полезнее иметь более четкие цели для каждой ветви, и в этом случае способ объединения двух ветвей имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...