Слияние закладок в Mercurial - PullRequest
7 голосов
/ 06 февраля 2012

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

hg update dev-1.1
hg merge feature1
abort: nothing to merge

Что я делаю не так?

Графическое представление моего репо:

o  changeset:   5:fa2b19961b46
|  bookmark:    feature1
|  description:  Work on feature 1 finished.
|
| o  changeset:   4:6ea0155d4d89
| |  bookmark:    feature2
| |  description: Work on feature 2 started. 
| |
o |  changeset:   3:44e335b5426c
| |  bookmark:    feature1
|/   description: Work on feature#1 started.
|
@    changeset:    2:407b3b94624f
|    tag:          dev-1.1
|    description:  Development for release 1.1 started. 

Ответы [ 2 ]

14 голосов
/ 06 февраля 2012

Как говорится, объединять нечего - вместо этого следует использовать обновление:

$ hg update feature1

Вы можете объединять только расходящиеся части истории, и здесь набор изменений dev-1.1 является просто предком набора изменений feature1. Mercurial 2.1 говорит

$ hg merge feature1
abort: nothing to merge
(use 'hg update' or check 'hg heads')

в этом случае, и мы надеемся, что это прояснит ошибку.

Если вы добавили в закладки набор изменений dev-1.1 (вместо того, чтобы пометить его), тогда обычный

$ hg update

теперь (с Mercurial 2.1) приведет к обновлению закладки dev-1.1. Так что, если вы начнете с

$ hg bookmarks
 * dev-1.1                   0:b1163a24728f
   feature1                  3:c84f04513651
   feature2                  2:e60dd08af282

, а затем обновить:

$ hg update
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
updating bookmark dev-1.1

затем закладка обновляется:

$ hg bookmarks
 * dev-1.1                   3:c84f04513651
   feature1                  3:c84f04513651
   feature2                  2:e60dd08af282

С более ранними версиями вам нужно будет сделать

$ hg update feature1
$ hg bookmark -f dev-1.1

Это все еще применяется, если обычный hg update не приведет вас к правильному набору изменений, например, если вы хотели вместо этого "слиться" с feature2.


Идея использования merge , когда история на самом деле не расходилась, возникла из Git. В этой системе существует понятие ускоренного слияния , которое мы называем обновлением в Mercurial.

3 голосов
/ 24 августа 2012

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

$ hg update feature1
$ hg debugsetparents dev-1.1 feature1
$ hg commit -m 'Feature 1 reviewed by me.'
$ hg bookmark -d feature1

Если наборы изменений не были обнародованы, вы можете свернуть наборы изменений в один:

$ hg update feature1
$ hg rebase --dest dev-1.1 --collapse
$ hg bookmark -d feature1
...