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

Меркуриальный переход меняется на новую ветку

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

4b9b3361

Ответ 1

Как предложил Марк, MqExtension - это одно из решений для вас. ИМХО - более простой рабочий процесс - использовать расширение переадресации. Предположим, что у вас есть такая история:

@  changeset:   2:81b92083cb1d
|  tag:         tip
|  summary:     my new feature: edit file a
|
o  changeset:   1:8bdc4508ac7b
|  summary:     my new feature: add file b
|
o  changeset:   0:d554afd54164
   summary:     initial

Это означает, что ревизия 0 является базой, на которой вы начали работать над вашей функцией. Теперь вы хотите иметь ревизии 1-2 на именованной ветке, скажем, my-feature. Обновите до версии 0 и создайте эту ветку:

$ hg up 0
$ hg branch my-feature
$ hg ci -m "start new branch my-feature"

История теперь выглядит так:

@  changeset:   3:b5939750b911
|  branch:      my-feature
|  tag:         tip
|  parent:      0:d554afd54164
|  summary:     start new branch my-feature
|
| o  changeset:   2:81b92083cb1d
| |  summary:     my new feature: edit file a
| |
| o  changeset:   1:8bdc4508ac7b
|/   summary:     my new feature: add file b
|
o  changeset:   0:d554afd54164
   summary:     initial

Используйте команду rebase для перемещения версий 1-2 на версию 3:

$ hg rebase -s 1 -d 3

Это приводит к следующему графику:

@  changeset:   3:88a90f9bbde7
|  branch:      my-feature
|  tag:         tip
|  summary:     my new feature: edit file a
|
o  changeset:   2:38f5adf2cf4b
|  branch:      my-feature
|  summary:     my new feature: add file b
|
o  changeset:   1:b5939750b911
|  branch:      my-feature
|  summary:     start new branch my-feature
|
o  changeset:   0:d554afd54164
   summary:     initial

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

Ответ 2

Вы можете использовать MqExtension. Пусть говорят, что изменения для перемещения - это изменения 1-3:

hg qimport -r 1:3    # convert revisions to patches
hg qpop -a           # remove all them from history
hg branch new        # start a new branch
hg qpush -a          # push them all back into history
hg qfin -a           # finalize the patches

Ответ 3

Я предпочитаю, чтобы патч-решение описывал здесь Марк Толонен

Что у меня:

hg log -G

#default branch
@  changeset:   3:cb292fcdbde1
|
o  changeset:   2:e746dceba503
|
o  changeset:   1:2d50c7ab6b8f
|
o  changeset:   0:c22be856358b

Что я хочу:

  @  changeset:   3:0e85ae268e35
  |  branch:      feature/my_feature
  |
  o  changeset:   2:1450cb9ec349
  |  branch:      feature/my_feature
  |
  o  changeset:   1:7b9836f25f28
  |  branch:      feature/my_feature
  |
 /
|
o  changeset:   0:c22be856358b

команды mercurials:

hg export -o feature.diff 1 2 3
hg update 0
hg branch feature/my_feature
hg import feature.diff

Вот состояние моего локального репозитория

@  changeset:   6:0e85ae268e35
|  branch:      feature/my_feature
|
o  changeset:   5:1450cb9ec349
|  branch:      feature/my_feature
|
o  changeset:   4:7b9836f25f28
|  branch:      feature/my_feature
|
| o  changeset:   3:cb292fcdbde1
| |
| o  changeset:   2:e746dceba503
| |
| o  changeset:   1:2d50c7ab6b8f
|/
|
o  changeset:   0:c22be856358b

Теперь мне нужно удалить ревизии 1 2 и 3 из моей ветки по умолчанию. Вы можете сделать это с помощью команды strip из расширения mq. hg strip удаляет набор изменений и все его потомки из репозитория.

Включить расширение, добавив следующие строки в файл конфигурации (.hgrc или Mercurial.ini):

vim ~/.hgrc и добавьте:

[extensions]
mq =

А теперь разделите этот репозиторий на версию 1.

hg strip 1

и здесь мы

@  changeset:   3:0e85ae268e35
|  branch:      feature/my_feature
|
o  changeset:   2:1450cb9ec349
|  branch:      feature/my_feature
|
o  changeset:   1:7b9836f25f28
|  branch:      feature/my_feature
|
o  changeset:   0:c22be856358b

note: изменения в настройках разные, но изменения одинаковы

Ответ 4

Для пользователей, склонных к использованию графического интерфейса пользователя

  • Перейдите к Tortoise HgFileSettings, затем отметьте rebase.

введите описание изображения здесь

  1. Перезапустите пользовательский интерфейс черепахи

  2. Создайте новую ветку, в которой вы будете перемещать изменения. Нажмите на имя текущего ветки → выберите Open a new named branch → выберите имя ветки.

введите описание изображения здесь

  1. Если изменения, которые вы хотите переместить, не были сделаны public (например, draft), перейдите к 5. (Если изменения уже опубликованы и вы не являетесь старшим разработчиком, вы должны поговорить с кем-то старшим (получить козла отпущения), так как вы могли бы сильно повредить вещи, я не беру на себя никакой ответственности:)).

Перейдите к ViewShow Console (или Ctrl + L) затем напишите в консоли hg phase -f -d 2 - где 2 - самая низкая версия, вы перейдете к новой ветке.

  1. Перейдите к ветке и ревизии (должна быть самая верхняя ревизия, если вы перемещаете изменения в новую ветку, созданную на шаге 3.) Right MouseUpdate

  2. Перейдите к ветке и реверсии, вы будете перемещать изменения с Right MouseModify Historyrebase

введите описание изображения здесь

  1. Нажмите rebase и молись, чтобы не было конфликтов, слейте, если вам нужно.

  2. Нажмите изменения, в этот момент все изменения должны быть draft.

  3. Перейдите к верхней ревизии в ветке, в которую вы двигали изменения: Right MouseChange Phase topublic.

введите описание изображения здесь

Надеюсь, это сэкономит вам некоторое время.