Ртутный перенести изменения в новую ветку
У меня есть ряд изменений, которые я зафиксировал в своем локальном репозитории, но еще не были нажаты. Поскольку на функцию требуется больше времени, чем ожидалось, я хочу поменять эти изменения на именованную ветвь, прежде чем нажимать. Как я могу это сделать?
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:c22be856358bmercurials команды:
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
- на
Tortoise Hg->File->Settingsзатем галочкуrebase.
перезапустить tortoise UI
создайте новую ветку, в которую вы будете перемещать изменения. Нажмите на текущее название филиала - > выберите
Open a new named branch-> выбрать филиал имя.
- если изменения, которые вы хотите переместить не составила
public(напримерdraft) перейдите к 5. (Если изменения уже были опубликованы, и вы не являетесь старшим разработчиком, вы должны поговорить с кем-то старшим (получить козла отпущения), поскольку вы можете сильно испортить ситуацию, я не несу никакой ответственности :) ).на
View->Show Console(или Ctrl + L) затем напишите в консольhg phase -f -d 2- где 2-самая низкая ревизия, вы будете переходить в новую ветку.
перейдите в ветвь и ревизию (должна быть самая верхняя ревизия, если вы перемещаете изменения в новую ветвь, созданную на Шаге 3.)
Right Mouse->Updateперейдите в ветку и revsion вы будете перемещать изменения из
Right Mouse->Modify History->Rebase
клик
Rebaseи молитесь, чтобы не было конфликтов, сливайтесь, если нужно.нажмите изменения, на данный момент все изменения должны быть
draft.перейти к самой верхней редакции в ветке вы перемещали изменения в
Right Mouse->Change Phase to->Public.надеюсь, что это экономит ваше время.




Comments