Я закончил работать над ответвлением функции 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
больше.
Действительно ли возможно закрыть объединенное ответвление, не оставляя еще одну голову? Там более корректный путь состоит в том, чтобы закрыть ответвление функции?
Связанные вопросы:
Один из способов - просто оставить слитые ветви функций открытыми (и неактивными):
$ 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. Закладки более удобны для ветвления, чем именованные ветви. См. также этот вопрос:
РЕДАКТИРОВАТЬ ой, слишком поздно ... Я знаю, что прочитал ваш комментарий, в котором говорится, что вы хотите сохранить набор изменений 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
Возможно, я неправильно понял, что вы хотели, но, пожалуйста, не уменьшайте модификацию, я потратил время на воспроизведение вашего варианта использования :)