Как правильно закрыть ветку функций в Mercurial?

я закончил работу над веткой функций 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 Mercurial не показывает головки закрытых ветвей в выводе

4 ответов


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

$ 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)

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

обновление: поскольку Mercurial 1.5 вы можете закрыть ветку в любое время, чтобы она не появлялась в обоих hg branches и


Имхо есть два случая для ветвей, которые забыли закрыть

корпус 1: ветвь не была объединена в default

в этом случае я обновляю ветвь и делаю еще одну фиксацию с --close-branch, к сожалению, это выбирает ветвь, чтобы стать новым наконечником, и, следовательно, прежде чем толкать его к другим клонам, я удостоверяюсь, что реальный наконечник получает еще некоторые изменения, а другие не путаются в этом странном наконечнике.

hg up myBranch
hg commit --close-branch

случай 2: филиал был объединен по умолчанию

этот случай не так сильно отличается от случая 1, и его можно решить, воспроизведя шаги для случая 1 и двух дополнительных.

в этом случае я обновляю набор изменений ветви, делаю еще одну фиксацию с --close-branch и объединяю новый набор изменений, который стал наконечником по умолчанию. последняя операция создает новую подсказку, которая находится в ветке по умолчанию-УРА!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

надеюсь, это поможет будущим читателям.


редактировать ой, слишком поздно... Я знаю, что прочитал ваш комментарий о том, что вы хотите сохранить набор изменений 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

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


странно, что никто еще не предложил самый надежный способ закрытия веток... Вы можете просто комбината merge commit с флагом --close-branch (т. е. фиксировать измененные файлы и одновременно закрывать ветку):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

вот и все. Ни одной лишней головы на ревграфе. Никаких дополнительных обязательств.