Ртутный перенести изменения в новую ветку



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

560   4  

4 ответов:

как предложил Марк,MqExtension является одним из решений для вас проблемы. IMHO более простой рабочий процесс заключается в использовании rebase extension. Предположим, у вас есть такая история:

@  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

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

можно использовать 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

Я предпочитаю патч решение описать здесь Марк tolonen отправит

что у меня есть:

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

Примечание: наборы изменений различны, но изменения одинаковы

для тех, кто склонен использовать GUI

  1. на Tortoise Hg ->File ->Settings затем галочку rebase .

enter image description here

  1. перезапустить tortoise UI

  2. создайте новую ветку, в которую вы будете перемещать изменения. Нажмите на текущее название филиала - > выберите Open a new named branch -> выбрать филиал имя.

enter image description here

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

на View ->Show Console (или Ctrl + L) затем напишите в консоль hg phase -f -d 2 - где 2-самая низкая ревизия, вы будете переходить в новую ветку.

  1. перейдите в ветвь и ревизию (должна быть самая верхняя ревизия, если вы перемещаете изменения в новую ветвь, созданную на Шаге 3.)Right Mouse ->Update

  2. перейдите в ветку и revsion вы будете перемещать изменения из Right Mouse ->Modify History ->Rebase

enter image description here

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

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

  3. перейти к самой верхней редакции в ветке вы перемещали изменения в Right Mouse ->Change Phase to ->Public.

enter image description here

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

Comments

    Ничего не найдено.