Как правильно окружить Подвижное ответвление функции?

Я закончил работать над ответвлением функции feature-x. Я хочу объединить результаты назад с default перейдите и близко feature-x для избавлений от него в выводе hg branches.

Я придумал следующий сценарий, но он имеет некоторые проблемы:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

Так feature-x ответвление (changests 40-41) закрывается, но существует одна новая голова, заключительное ответвление changeset 44, это будет перечислено в hg heads каждый раз:

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

Обновление: кажется, что начиная с Подвижной версии 1.5 не показывает главам закрытых ответвлений в выводе hg heads больше.

Действительно ли возможно закрыть объединенное ответвление, не оставляя еще одну голову? Там более корректный путь состоит в том, чтобы закрыть ответвление функции?

Связанные вопросы:

238
задан Community 23 May 2017 в 02:34
поделиться

2 ответа

Один из способов - просто оставить слитые ветви функций открытыми (и неактивными):

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

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

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

Первый способ проще, но он оставляет открытую ветвь. Второй способ не оставляет открытых голов/ветвей, но требует ещё одного дополнительного коммита. Можно объединить последнюю актуальную фиксацию ветви feature с этой дополнительной фиксацией с помощью --close-branch, но нужно заранее знать, какая фиксация будет последней.

Update: Начиная с Mercurial 1.5 вы можете закрыть ветку в любое время, поэтому она больше не будет появляться в hg branches и hg heads. Единственное, что может вас раздражать, это то, что технически в графе ревизий останется ещё одна ревизия без дочерних.

Обновление 2: Начиная с Mercurial 1.8 закладки стали основной функцией Mercurial. Закладки более удобны для ветвления, чем именованные ветви. См. также этот вопрос:

218
ответ дан 23 November 2019 в 03:22
поделиться

РЕДАКТИРОВАТЬ ой, слишком поздно ... Я знаю, что прочитал ваш комментарий, в котором говорится, что вы хотите сохранить набор изменений feature-x, поэтому подход клонирования здесь не работает.

Я все же оставлю здесь ответ, потому что это может помочь другим.

Если вы хотите полностью избавиться от «функции X», потому что, например, она не работает, вы можете клонировать. Это один из методов, описанных в статье, и он действительно работает, и в нем говорится конкретно о головах.

Насколько я понимаю, у вас есть это и вы хотите избавиться от головы "feature-x" раз и навсегда:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

Итак, вы делаете это:

hg clone . ../cleanedrepo --rev 7

И у вас будет следующее, и вы я увижу, что функция-x действительно исчезла:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

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

11
ответ дан 23 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: