2013-09-05 5 views
0

Я не уверен, почему это так сложно понять или google, но я пытаюсь принять изменения, которые я внес в частную ветвь, и направить их на ветку по умолчанию.Mercurial - Как нажимать текущий набор изменений на ветку по умолчанию

Другими словами:

  1. Я вытащил из ветви по умолчанию несколько недель назад и сделали крупные изменения
  2. С тех пор, как я закончил мою работу
  3. Я тогда слил код от оригинала (только код, HG по-прежнему установлен в «NewBranch»
  4. Теперь, когда код работает, я хочу зафиксировать и переместить эти изменения обратно в ветку по умолчанию и продолжить свою разработку оттуда.

Но я не могу найти никакой информации о том, как это сделать. Если я переключаю ветви, я теряю все свои изменения, так как я все еще в NewBranch. Я не могу понять, что такое перебаза или пересадка, и не может найти руководства, объясняющие сценарии того, что они могут использовать ... Так что, надеюсь, кто-то здесь знает, что делать!

Я специально использую Mercurial на Eclipse, но я хорошо делаю это в командной строке, если это проще.

ответ

2

merge - это способ получить изменения от одной ветки к другой. Я знаю, что вы объединили default в функцию, но теперь вы идете в другую сторону. Вот пример, где пронумерованные Изменения приходят от других людей и литерных ревизий приходит от вас:

Перед тем, как сделать что-нибудь клонировать и есть это:

[1]---[2]---[3]---[4] (default branch) 

затем вы создаете свой филиал под названием «функция» и сделать два совершает на ней, получая:

[1]---[2]---[3]---[4]   (default branch) 
        \ 
        [A]---[B] ('feature' branch) 

тогда вы hg pull, чтобы получить изменения по умолчанию, так как вы расходились вниз в локальном хранилище:

[1]---[2]---[3]---[4]---[5]---[6] (default branch) 
        \ 
        [A]---[B]  ('feature' branch) 

теперь вы хотите их изменения (5 и 6), интегрированные в вашей отрасли, так что вы делаете:

hg checkout feature # make sure you're looking at the he head of your branch 
hg merge default  # merge default into your branch 

, который дает:

[1]---[2]---[3]---[4]---[5]---[6]  (default branch) 
        \   \ 
        [A]---[B]---[C]  ('feature' branch) 

Если я правильно понять, что вы уже все это произошло, поэтому теперь вам просто нужно принести свою ветку, в том числе новую фиксацию слияния, C, по умолчанию, которая снова выполняется с помощью слияния:

hg checkout default # hop back to default, files look like [6] and [A] and [B] are missing 
hg merge feature  # merge feature into default brining [A] and [B] in 

, что дает:

[1]---[2]---[3]---[4]---[5]---[6]---[7] (default branch) 
        \   \ /
        [A]---[B]---[C]  ('feature' branch) 

Это выглядит как много работы, проведенной именно так, но на практике это, как правило, просто:

hg branch feature 
....work.... 
hg commit 
hg pull 
hg merge default 
hg checkout default 
hg merge feature 

и если pull не обрушить любую новую работу от других вы можете пропустить слияние дефолта в ваш.

Это создает два новых набора изменений слияния. Они легко спрятаны на hg log, если вы найдете их бесполезными (некоторым людям нравится записывать, в каком направлении происходит каждое слияние), но если вы хотите полностью их избежать, вы можете использовать bookmarks (очень похожий на ветви git) вместо «named ветви "для ваших функций - тогда вы избежите набора изменений слияния, когда вернетесь, так как это будет духовный эквивалент того, что git называет« быстрым переходом »слияния.

+1

Ах, конечно! Мне просто нужно слить в другое направление и нажать. Ба! :) –

Смежные вопросы