слияние с веткими, не имеет значения, с кем вы слились?

версия git 1.7.5.4

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

Я хочу объединить 2 ветки вместе. скажем, branch1 и branch2. У этих отраслей есть много различий.

Я сейчас работаю над branch1 и только что понял, что есть некоторые изменения, которые я внедрил в branch2, которые я хочу в branch1.

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

checkout branch2 and merge branch1

или

checkout branch1 and merge branch2

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

Ответ 1

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

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

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

git show head~4

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

git show head^^2^^

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

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

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

Ответ 2

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

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

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