Используя Mercurial, нужно ли "hg merge -r 6880", если есть дополнительная ветка? - PullRequest
4 голосов
/ 09 марта 2011

Для Mercurial, сейчас есть ветвь default и ветвь newfeature ... это правда, что если я нахожусь на ветке newfeature и выполняю hg pull и hg update, она всегдапопросить меня объединить?(если есть изменения, которые я вытащил)

Кроме того, кажется, что я не могу просто сделать hg merge?Мне нужно использовать hg heads, а затем посмотреть, что такое голова ветки newfeature (скажем, это ревизия 6880), тогда мне нужно hg merge -r 6880?В противном случае Mercurial автоматически объединит ветку newfeature с веткой default?Кажется, я не могу сделать hg merge -b newfeature, поскольку для hg merge нет опции -b.

Есть ли более простой способ, чем использование hg heads, для поиска ревизии для слияния?Разве нет более автоматического способа?

Ответы [ 3 ]

4 голосов
/ 09 марта 2011

У вас есть два вопроса, позвольте мне ответить на них по одному (с небольшим перефразированием):

Q. Когда я hg pull получу новую голову, Mercurial предложит мне hg merge. Должен ли я?

A. Нет. Mercurial просто предупреждает вас, что у вас больше голов, чем у вас, и что если вам не нравится это соглашение, вы можете объединиться, чтобы остановить его. Именованные ветви - это головы, поэтому вы увидите это предупреждение, если потяните за собой новую голову

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

A . Нет. Это правда, что hg merge будет автоматически выбирать головки только с той же именованной ветвью, но вы можете сделать hg merge -r newfeature, и это объединит набор изменений от точки расхождения до головки на newfeature (6880 в вашем примере ) точно так же, как hg update -r 6880.

В любом случае, после совершения этого слияния у вас не будет заголовков на newfeature (новый, получившийся заголовок на default, потому что это было имя ветви вашего родителя до того, как вы начали слияние. Однако просто делать это после слияния:

hg update newfeature
...code....
hg commit

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

2 голосов
/ 09 марта 2011

Если вы вытягиваете набор изменений или наборы изменений из одной ветви в другую ветвь, которая имеет тот же корневой набор изменений. У Mercurial будет несколько голов, как вы уже заметили. Это только предложит вам объединиться, когда вы выполните hg update в одной из ветвей.

Вам не нужно указывать, к какой ревизии нужно присоединиться, при условии, что вы хотите объединить tips каждой из ветвей. hg merge должно хватить.

Структура вашей команды должна выглядеть следующим образом

hg pull -b 'branchYouWantToPullFrom`
hg update
hg merge
hg commit
1 голос
/ 09 марта 2011

hg merge работает в вашей рабочей копии, которая всегда связана с определенной веткой.

Вы должны указывать имя ветви, только если вы хотите объединить текущую ветку с другой веткой: hg merge branch_name.

hg pull обновляет ваш репозиторий всеми удаленными изменениями. Затем вы должны обновить свою рабочую копию, которая связана с определенной веткой. Поэтому, когда вы вводите команду hg update, вы обновляете свою рабочую копию со всеми изменениями в вашей текущей ветке. Если вы хотите переключиться на другую ветку, вам нужно набрать hg update branch_name. Вы можете набрать hg branch, чтобы узнать текущую ветку.

Единственная причина слияния с определенной ревизией - когда у вас три или более голов, странная ситуация, вероятно, вызванная какой-то hg push -f (крайне плохая практика). Если вы находитесь в такой ситуации, правильный способ узнать, какие ревизии вам необходимо объединить, это hg heads. В обычной ситуации hg heads возвращает одну головку на ветку, поэтому вам не нужно объединять две головки разных веток, если вы не хотите.

Если вы работаете над веткой, и кто-то зафиксировал и отправил некоторые изменения в одну и ту же ветку, вы должны объединить и объединить до своего нажатия, просто с помощью hg merge, без ревизии или ветви.

Надеюсь, это вам поможет.

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