Mercurial через TortoiseHg - объединить именованную ветку и закрыть ее - PullRequest
32 голосов
/ 01 февраля 2011

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

Теперь (каждая буква является коммитом):

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

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

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

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

Я также искал опцию "закрыть ветку" в обозревателе хранилища, но ничего не смог найти.

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

Редактировать: Я отправил выпуск в TortoiseHg

Ответы [ 5 ]

42 голосов
/ 08 мая 2012

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

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

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

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

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

  1. нажмите Hg Commit ... , когда вы в своей ветке NewFeature (не нужно ничего коммитить - или вы делаете это с окончательным слиянием)
  2. нажмите «Филиал: NewFeature» (оно выделено жирным шрифтом)
  3. выберите «Закрыть текущую ветку» .
23 голосов
/ 01 февраля 2011

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

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

Использование обозревателя хранилища:

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

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

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

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

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

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

16 голосов
/ 23 января 2018

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

Как объединить ветвь элемента и закрыть ветку

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

Switch to the default branch

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

Merge one branch into another

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

Confirmation box

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

Branch merge graph

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

Update to branch to close

  1. Нажмите commit , большой зеленый тик в верхней части верстака. Big green tick

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

Commit window with branch name we want to close

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

Close current branch

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

Graph showing closed branch

1 голос
/ 20 августа 2015

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

1 голос
/ 01 февраля 2011

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

Закрытие ветви создаст новый набор изменений поверх подсказки ветви.

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

...