Подтвердить что ты не робот

Как удалить Mercurial ветку после слияния

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

Но мне интересно, есть ли способ полностью удалить те названные ветки без потери изменений, которые объединены в ветку по умолчанию?

4b9b3361

Ответ 1

Нет. Нет.

Когда вы объединили две ветки, фиксация слияния зависит от существования двух ее родительских коммитов. Это означает, что вы не можете удалить коммиты, составляющие объединенную ветвь, если вы также не удаляете фиксацию слияния, которую вы не хотите делать.

Это тоже не "Mercurial way", чтобы делать что-то. Когда ветвь была объединена в другую ветвь, и в этой ветке дальнейшая разработка не была выполнена, Mercurial признает, что эта ветка больше не активна; hg branches помещает эти неактивные ветки в нижнюю часть списка. Вы также можете закрыть ветвь с помощью hg commit --close-branch, которая удалит ветвь из списка hg branches (если не указан параметр -c).

Похоже, вы должны заглянуть в Mercurial queues (MQ), потому что это поддерживает аналогичный рабочий процесс для того, что вы описываете. Например, вы можете настроить несколько очередей MQ, и каждая из них представляет собой ветвь разработки.

Ответ 2

Идея:

Как раз перед тем, как направить мою объединенную ветку функций на удаленный сервер, я подумал: "Я не хочу, чтобы кто-нибудь знал о моей ветке, я бы предпочел, чтобы она никогда не существовала". Поэтому я решил поместить все мои локальные изменения в одну фиксацию, прежде чем нажимать на удаленный.

Подход:

  • Источники клонов и реестры веток в отдельный каталог:

    hg clone ssh://site//hg/repository repository-origin
    hg clone /home/user/work/repository repository-branch
    
  • объединить дефолты по умолчанию и ветки функций внутри ветки-репозитория:

    cd repository-branch
    hg merge feature-branch
    hg commit -m "feature-branch: merging into default"
    cd ..
    
  • создать master репозиторий:

    hg clone repository-origin repository
    
  • перезапишите все файлы в master с помощью файлов репозитория (исключая скрытые):

    rsync -av --exclude=".*" repository-branch/ repository
    
  • объединить все изменения из ветки функций в мастер с помощью одного фиксации:

    cd repository
    hg commit -m "feature-branch: merging into default"
    
  • нажмите на удаленный

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

Плюсы/минусы:

  • работает для распущенных ветвей
  • squashes объединяется и теряет информацию
  • не требуется никаких расширений