Mercurial через TortoiseHg - объединить именованную ветку и закрыть ее

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

Теперь (каждая буква - это фиксация):

   default: A---B
NewFeature:      \--C---D

Что бы я хотел:

   default: A---B-----------E
NewFeature:      \--C---D--/

Я попытался щелкнуть каталог правой кнопкой мыши и выбрать «Hg Commit ...». Затем я выбрал «Закрыть текущую именованную ветвь». У меня такая ошибка: abort: can only close branch heads

Я также искал опцию «закрыть ветвь» в проводнике репозитория, но ничего не нашел.

Может кто-нибудь помочь? Заранее спасибо!

Изменить: я опубликовал проблему в TortoiseHg


person sharoz    schedule 01.02.2011    source источник


Ответы (5)


Для слияния нужна чистая рабочая копия - никаких незафиксированных изменений. Слияние будет помещено в рабочую копию для проверки, а затем вы зафиксируете рабочую копию, чтобы «завершить» слияние.

Если у вас есть незафиксированные изменения, которые вы не готовы зафиксировать, вы можете временно отложить эти изменения (если у вас есть соответствующее расширение) или оформить новую рабочую копию в другом месте для использования для слияния.

Используя проводник репозитория:

  1. Update рабочая копия до версии B.

  2. Выберите строку rev D в истории изменений.

  3. Щелкните правой кнопкой мыши rev D и выберите Merge with.... В диалоговом окне должна отображаться версия B должна быть локальной версией, а D - другой версией.

  4. Щелкните Merge в диалоговом окне слияния и разрешите любые конфликты, если они есть.

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

Если после шагов 1–4 все в порядке, щелкните Commit в диалоговом окне слияния, чтобы зафиксировать слияние.

person Bert F    schedule 01.02.2011
comment
Если вам также действительно нужно пометить ветку NewFeature как закрытую, выполните еще один шаг до шага 1 получателя Берта F. Оставаясь в рабочей копии на ревизии D, выберите Закрыть текущую ветвь из диалогового окна, которое вы можете открыть из селектора ветвей в центре строки с помощью кнопки Commit напишите заметку, как NewFeature done, и нажмите Commit. - person Nashev; 25.08.2017
comment
После этого вы можете объединить эту закрытую ветку с веткой по умолчанию, как описано ниже Бертом Ф. - person Nashev; 25.08.2017

Приведенный вами пример больше относится к слиянию, чем к закрытию. Кроме того, если это так просто, вам, вероятно, не нужно / не нужно создавать именованную ветку.

Но если вы действительно хотите закрыть ветку через TortoiseHg, например

  1. вы создали ветку NewFeature
  2. затем были изменены как ветка по умолчанию, так и ветки NewFeature
  3. тогда, если ветвь NewFeature занимает довольно много времени, вы, возможно, уже несколько раз объединяли Default с NewFeature (чтобы избежать слишком большого количества различий, когда вы захотите окончательно объединить ветвь NewFeature с ветвью по умолчанию)
  4. со временем ваша новая функция будет полностью реализована или достаточно стабильна, вы объединили ветвь NewFeature с ветвью по умолчанию.

С этого момента никто не должен ничего делать в ветке NewFeature, поэтому вы хотите закрыть ее.

Сделать это можно в TortoiseHg (у меня версия 2.3.2):

  1. нажмите Hg Commit ..., когда вы находитесь в ветке NewFeature (не нужно ничего фиксировать - или вы делаете это при последнем слиянии)
  2. нажмите "Branch: NewFeature" (вверху жирным шрифтом)
  3. выберите «Закрыть текущую ветку».
person user276648    schedule 08.05.2012
comment
Это помогло мне, но я предполагаю, что это должно выглядеть по-разному между версией 2 и 3. Мне пришлось щелкнуть в диалоговом окне, в котором вы должны ввести сообщение о фиксации для шага 1, хотя, возможно, вы имели в виду именно это. - person DCShannon; 07.08.2015

Для тех, кто смущен ответами на этот вопрос, вот инструкции, как это сделать из TortoiseHg Workbench:

Как объединить ветку функции и закрыть ветку

  1. Откройте TortoiseHg Workbench.
  2. Выберите свой репозиторий из репозитория реестра.
  3. Переключитесь на ветку, в которую вы хотите объединить свою ветку (в этом примере по умолчанию):

Перейти в ветку по умолчанию

  1. Щелкните правой кнопкой мыши ветку, которую вы хотите объединить и закрыть (NewFeature в этом примере), и выберите Объединить с локальной. Это объединит изменения ветки из ветки NewFeature в default:

Слить одну ветку с другой

  1. Вы увидите окно подтверждения, подтверждающее, что ваши изменения будут объединены из одной ветки в другую, нажмите шаги Далее, Зафиксировать сейчас и Готово:

«Окно

  1. Теперь вы можете видеть на графике, что изменения были объединены, теперь мы можем закрыть ветку NewFeature, поскольку она нам больше не нужна:

График слияния ветвей

  1. Обновите свой локальный адрес до ветки, которую вы хотите закрыть, в данном случае это NewFeature:

«Обновите

  1. Нажмите зафиксировать, большую зеленую галочку в верхней части рабочей области. Большая зеленая галочка

  2. В окне фиксации вы должны увидеть ветку, которую хотите закрыть, над текстовым полем комментария. Щелкните название ветки:

Окно фиксации с названием ветки, которую мы хотим закрыть

  1. В появившемся окне выберите закрыть текущую ветку:

Закрыть текущую ветку

  1. Теперь нажмите фиксацию. Ваш график должен показать, что ветка закрыта:

«График

person Luke    schedule 23.01.2018

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

Закрытие ветки создаст новую ревизию поверх подсказки ветки.

Описанная вами ошибка (abort: can only close branch heads) обычно возникает, если вы обновили набор изменений не на конце именованной ветки.

person Tim Henigan    schedule 01.02.2011
comment
Я уже сделал. Чтобы убедиться, я щелкнул правой кнопкой мыши фиксацию D в проводнике репозитория и выбрал «Обновить ...» (с отменой локальных изменений). Затем я щелкнул правой кнопкой мыши каталог репозитория, выбрал Hg Commit ... и выбрал Закрыть текущую именованную ветку. Я нажимаю кнопку фиксации, и выскакивает та же ошибка. - person sharoz; 01.02.2011
comment
@sharoz: Следующим шагом было бы попробовать это из командной строки. hg --debug commit --close-branch -m "Closing branch". Если результат debug вам ничего не говорит, то я бы попробовал hg update --clean, чтобы быть абсолютно уверенным. - person Tim Henigan; 01.02.2011

Вы также, похоже, получаете эту ошибку, если ветка уже закрыта, т.е. пытается закрыть закрытую ветку. Было бы полезно получить более полезное сообщение об ошибке.

person nicodemus13    schedule 20.08.2015