Я закончил работу над веткой функций 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
ветвь (changets 40
- 41
) закрыта, но есть один новый заголовок 44
, changeset закрывающей ветки , который будет перечисляться 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 больше не показывает заголовки закрытых ветвей в выводе hg heads
.
Можно ли закрыть объединенную ветку, не оставив еще одной головы? Есть ли более правильный способ закрыть ветку объектов?
Смежные вопросы:
default
не закрывая их. Это привело к 0 новым головам, но такие ветви были видныhg branches
навсегда (как неактивные ветви).Ответы:
Один из способов - просто оставить объединенные ветки объектов открытыми (и неактивными):
Другой способ - закрыть ветку объектов перед слиянием, используя дополнительный коммит:
Первый проще, но оставляет открытую ветвь. Второй не оставляет открытых голов / веток, но требует еще одного вспомогательного коммита. Можно использовать последний фактический коммит в ветви функции с использованием этого дополнительного коммита
--close-branch
, но нужно заранее знать, какой коммит будет последним.Обновление : Так как Mercurial 1.5 вы можете закрыть филиал в любое время , поэтому он не будет отображаться в обоих
hg branches
иhg heads
больше. Единственное, что может вас раздражать, это то, что технически граф ревизий будет иметь еще одну ревизию без детей.Обновление 2 : Начиная с Mercurial 1.8 закладки стали основной особенностью Mercurial. Закладки более удобны для ветвления, чем именованные. Смотрите также этот вопрос:
источник
Bookmarks are more convenient for branching than named branches
. Hg закладки - это не то же самое, что ветки Git. Они полны многих крайних случаев, которые делают их непригодными в качестве ответвлений. Например: когда вы клонируете репозиторий, вы получите последний коммит вdefault
ветке. Если вы используете закладки, этот набор изменений соответствует случайной (нестабильной) закладке. Если вы используете именованные ветви, вы получите последний коммит в стабильной / стандартной ветке, что обычно и является тем, что вам нужно. Закладки попадут туда однажды, но их пока нет.abort: push creates new remote branches:
. Что я мог сделать не так?imho есть два случая для веток, которые забыли закрыть
Случай 1: ветвь не была объединена с дефолтом
в этом случае я обновляюсь до ветви и делаю еще один коммит с --close-branch, к сожалению, он выбирает ветку, чтобы стать новым наконечником, и, следовательно, перед тем, как отправить его в другие клоны, я проверяю, что реальный совет получает еще некоторые изменения и другие не запутайся насчет этого странного совета.
Случай 2: ветвь была объединена по умолчанию
Этот случай не сильно отличается от случая 1, и его можно решить путем воспроизведения шагов для случая 1 и двух дополнительных.
в этом случае я обновляюсь до набора изменений ветви, делаю еще один коммит с --close-branch и объединяю новый набор изменений, который стал подсказкой по умолчанию. последняя операция создает новый совет в ветке по умолчанию - HOORAY!
Надеюсь, это поможет будущим читателям.
источник
hg help ci
объясню вам.РЕДАКТИРОВАТЬ ой, слишком поздно ... Я знаю, что прочитал ваш комментарий, в котором говорится, что вы хотите сохранить ревизию Feature-X, так что подход клонирования здесь не работает.
Я все еще позволю ответ здесь, поскольку это может помочь другим.
Если вы хотите полностью избавиться от «функции X», потому что, например, она не работает, вы можете клонировать. Это один из методов, описанных в статье, и он работает, и он говорит конкретно о руководителях.
Насколько я понимаю, у вас есть это и вы хотите избавиться от головы "feature-x" раз и навсегда:
Итак, вы делаете это:
И у вас будет следующее, и вы увидите, что feature-x действительно отсутствует:
Возможно, я неправильно понял, что вы хотели, но, пожалуйста, не выключайте мод, я потратил время на воспроизведение вашего варианта использования:)
источник
Странно, что никто еще не предложил самый надежный способ закрытия ветвей объектов ... Вы можете просто объединить коммит слияния с флагом --close-branch (т.е. зафиксировать измененные файлы и закрыть ветку одновременно):
Так что это все. Ни одной лишней головы на ревграфе. Никакой дополнительной фиксации.
источник
merge
команды может быть полезно использовать ее,hg branch
чтобы убедиться, что имя ветви слияния является тем, которое вы хотите оставить открытым.