У меня есть ряд изменений, которые я внес в свой локальный репозиторий, но еще не внесен. Поскольку функция занимает больше времени, чем ожидалось, я хочу поменять эти изменения на именованную ветку, прежде чем нажимать. Как я могу это сделать?
124
Ответы:
Как предложил Марк, MqExtension - одно из решений вашей проблемы. IMHO, более простой рабочий процесс - использовать расширение rebase . Предположим, у вас есть такая история:
Это означает, что ревизия
0
- это основа, на которой вы начали работу над своей функцией. Теперь1-2
, скажем, вы хотите иметь исправления в именованной веткеmy-feature
. Обновите до ревизии0
и создайте эту ветку:История теперь выглядит так:
Используйте
rebase
команду, чтобы переместить ревизию1-2
в ревизию3
:Это приводит к следующему графику:
Вот и все ... как упоминалось в комментариях к ответу Марка, перемещение уже выдвинутых наборов изменений обычно является плохой идеей, если вы не работаете в небольшой команде, где вы можете общаться и обеспечивать выполнение своих манипуляций с историей.
источник
fold
команды теперь встроенного расширения histedit ).hg log -G
( GraphlogExtension ). Я вырезал некоторые строки вручную, но их также можно было отобразить полностью автоматически с использованием пользовательских стилей журнала .Вы можете использовать MqExtension . Скажем, наборы изменений, которые нужно переместить, - это ревизии 1-3:
источник
Я предпочитаю описанное здесь патч-решение Марком Толоненом
Что у меня есть:
Что я хочу:
Команды mercurials:
Вот состояние моего локального репозитория
Теперь мне нужно удалить ревизии 1, 2 и 3 из моей ветки по умолчанию. Вы можете сделать это с помощью команды strip из расширения mq.
hg strip
удаляет набор изменений и всех его потомков из репозитория.Включите расширение, добавив следующие строки в ваш файл конфигурации (.hgrc или Mercurial.ini):
vim ~/.hgrc
и добавить :А теперь удалите этот репозиторий на ревизию 1.
и вот мы
примечание: ревизии разные, но ревизии такие же
источник
Для тех, кто склонен использовать графический интерфейс
Tortoise Hg
->File
->Settings
затем отметьтеrebase
.Перезапустить интерфейс черепахи
Создайте новую ветку, в которую вы будете переносить изменения. Щелкните имя текущей ветки -> выберите
Open a new named branch
-> выберите имя ветки.public
(напримерdraft
), перейдите к 5. (Если изменения уже были опубликованы, и вы не являетесь старшим разработчиком, вам следует поговорить с кем-то старшим (получить козла отпущения), так как вы можете сильно облажаться. , Ответственности не беру :)).Перейдите к
View
->Show Console
(или Ctrl+ L), затем напишите в консолиhg phase -f -d 2
- где 2 - самая низкая ревизия, вы перейдете в новую ветку.Перейти к ветке и ревизии (должна быть самая верхняя ревизия, если вы перемещаете изменения в новую ветку, созданную на шаге 3)
Right Mouse
->Update
Перейдите в ветку и версию, из которой вы будете перемещать изменения
Right Mouse
->Modify History
->Rebase
Щелкай
Rebase
и молись, чтобы не было конфликтов, сливайся, если нужно.Нажимайте изменения, на этом этапе все исправления должны быть
draft
.Перейдите к самой верхней ревизии в ветке, в которую вы перемещали изменения
Right Mouse
->Change Phase to
->Public
.Надеюсь, это сэкономит вам время.
источник
public
автоматически (по крайней мере, для меня они не меняются ).