Как мне обрезать ветки с помощью клонирования в Mercurial? - PullRequest
3 голосов
/ 29 июля 2011

Допустим, у меня есть ртутный проект, и я делаю это:

hg branch whatever
touch newfile
hg add newfile
hg commit -m "added newfile" --close-branch
hg up -C default
hg merge whatever
hg push
abort: push creates new remote branch 'whatever'!
(did you forget to merge? use push -f to force)

Как убрать ветку, чтобы hg branches -c там не показывался? Это отчасти расстраивает, что это не позволяет мне выдвигать битбакет. Я прочитал документацию , но первые два пункта я, вероятно, не правильно понимаю (так как я получаю сообщение об ошибке, даже если я слился). Третий пункт, касающийся удаления через clone. Я не понимаю, как это сделать, так как я всегда получаю ветку функций в своем репо.

Ответы [ 3 ]

4 голосов
/ 29 июля 2011

Если whatever была хорошей, законной ветвью (скажем, ветвью функций), и вы хотите, чтобы она была в репозитории Bitbucket, вы должны сделать hg push --new-branch.Без этого переключателя, думает Mercurial, эй, может быть, вы вообще не хотите нажимать на эту ветку, может быть, это приватно, и вы собираетесь совершить ошибку.

Если вы не хотите whateverчтобы быть реальной именованной веткой, вы можете использовать закладки вместо именованных ветвей.В отличие от именованных веток, закладки могут быть позже удалены.

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

Нет новых наборов изменений в репозитории Bitbucket. В этом случае вы просто удаляете закладку и нажимаете, потому что нет головок для слияния / перебазирования.Помните, что с закладками A - D находятся в ветке default.

1 -- 2 -- 3 -- A -- B -- C -- D
               ^              ^
               your work      'whatever' bookmark

Новые наборы изменений в репозитории Bitbucket. Вы вытягиваете, а затем перезагружаете свою работу сверхуподсказки репозитория Bitbucket, затем удалите закладку и нажмите.

               new changeset you pulled
               v
1 -- 2 -- 3 -- 4 -- 5 
            \
              A -- B -- C -- D
              ^              ^
              your work      'whatever' bookmark

Вы делаете hg rebase -B whatever, чтобы сделать историю линейной:

               new changeset you pulled
               v
1 -- 2 -- 3 -- 4 -- 5 -- A -- B -- C -- D
                         ^              ^
                         your work      'whatever' bookmark

А затем удалите закладку и нажмите.

Перебазирование создает новые наборы изменений, поэтому никогда не перебрасывайте наборы изменений, которые вы уже выдвинули.

2 голосов
/ 29 июля 2011

Ну, во-первых, у вас нет , чтобы удалить эту ветку.

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

Однако, если вы хотите сохранить ветку, просто сделайте то, что написано в предупреждении, нажмите с опцией -f:

hg push -f

Теперь, с другой стороны, если вы действительно хотите удалить его, вот как вы можете это сделать:

Strip

Если у вас включено расширение «mq», вы можете удалить набор изменений:

 hg strip REV

удаляет ревизию REV и все, что из нее следует, из хранилища.

Вы должны делать это только в клоне, если вы не уверены в эффекте или действительно хотите этого

MQ

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

Клон

В основном вы клонируете то, что хотите сохранить

hg clone --branch default original newclone

Это будет клонировать от original до newclone и клонировать только ветку по умолчанию. Если вы хотите клонировать больше, чем ветка по умолчанию, вы можете повторить опцию --branch NAME для каждой ветви, которую вы хотите клонировать.

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

1 голос
/ 29 июля 2011

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

...