2015-01-23 4 views
1

Я использую Mercurial GUI TortoiseHg. Меня попросили перейти от рабочего подразделения по умолчанию к производственному подразделению, написать часть кода, зафиксировать и направить его туда, а затем обновить ветвь по умолчанию и продолжить мои последующие назначения там, поскольку мы продолжаем разделение по умолчанию и производство. Тем не менее, был также запрос «объединить последнее изменение также в ветку по умолчанию».Как слить последнюю версию с другой ветки без полного объединения ветвей?

Как слить последнюю версию также по умолчанию, не объединяя две ветви как одну, что, конечно же, не то, что я хочу сделать?

ответ

2

Вы не можете.

При объединении вы всегда объединяете всю ветвь до этой точки, а не только один набор изменений.

У вас есть два варианта.

Вы можете «пересаживать» или «пересаживать» (в зависимости от версии Mercurial, которую вы используете) с одним набором изменений от одной ветви к другой. Это позволит эффективно (попытаться) применить те же самые изменения к целевой ветке и сделать небольшую заметку о том, откуда произошли изменения. Это не слияние.

Чтобы использовать эти функции, сначала обновите кончик ветки, и вы хотите, чтобы набор изменений был «объединен», а затем используйте команду трансплантата/трансплантата, чтобы применить другую ревизию поверх нее. Если вы делаете это с помощью TortoiseHg, вы можете щелкнуть правой кнопкой мыши набор изменений, который хотите «объединить», и там должен быть пункт меню. Если нет, вам может потребоваться включить расширение или, возможно, даже обновить версию более новой версии Mercurial/TortoiseHg.

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

Другими словами, вы бы имели это:

A---B---C---D---E---F <-- branch 1 
    \ 
     +-1---2---3---4 <-- branch 2 

Вы бы обновили обратно B, совершенное ваше исправление в верхней части B, а затем объединить эту ревизию в обе ветви, как это:

 +-C---D---E---F <-- branch 1 
    /
A---B---X    <-- fix changeset 
    \ 
     +-1---2---3---4 <-- branch 2 

, а затем после слияния:

 +-C---D---E---F---G 
    /    /
A---B---X-------------+ 
    \     \ 
     +-1---2---3---4---5 

G и 5 - это два слияния в этом случае.

+0

Отличный ответ. Мой руководитель пояснил позже, что он случайно использовал слово merge. Это вызвало путаницу. –

+1

Да, трансплантат - это путь, или вы «вишневый» в git .. –