У меня такой вопрос:
- Если в моем хранилище Mercurial есть две головы (ветви с изменениями), и я хотел бы избавиться от одной из них, но отменить все измененияиз этой ветви вместо объединения их в другую, и я не могу удалить эти наборы изменений, поэтому мне нужно объединить, как я могу это сделать с помощью клиента командной строки?
ЕслиУ меня есть две головы в моем хранилище Mercurial, и я использую TortoiseHg в качестве моего клиента, хранилище может выглядеть так:
Тогда я могу избавиться от головы test2
с помощьюделает слияние и отбрасывание.Сначала я хотел бы обновить заголовок, который я хотел бы сохранить (test3
в данном случае, который на изображении выше уже является текущим родителем моей рабочей папки).Затем я бы щелкнул правой кнопкой мыши и выбрал «Объединить с ...»:
, и в появившемся диалоговом окне я бы хотел отменить изменения из цели слияния (т. е. ветвь, от которой я хотел бы отменить все изменения):
После того, как это слияние прошло, все изменения в головке test2
были отброшеныи я могу совершить.Голова исчезла, но набор изменений все еще является частью истории.
Мой вопрос таков: как я могу сделать то же самое, используя только клиент командной строки?Я не могу найти ни одного соответствующего параметра для команды hg merge
:
hg merge [-P] [-f] [[-r] REV]
merge working directory with another revision
... snipped text
options:
-f --force force a merge with outstanding changes
-t --tool VALUE specify merge tool
-r --rev REV revision to merge
-P --preview review revisions to merge (no merge is performed)
--mq operate on patch repository
use "hg -v help merge" to show global options
Редактировать : debugsetparents работал хорошо:
hg debugsetparents . 1
hg commit -m "merged to get rid of changeset #1"
Редактировать : Попытка использовать --tool internal:local
в соответствии с одним из ответов:
@echo off
setlocal
if exist repo rd /s /q repo
hg init repo
cd repo
rem revision 0
echo >test1.txt
hg commit -m "test1" --addremove
rem revision 1
echo >test2.txt
hg commit -m "test2" --addremove
rem revision 2
hg update 0
echo >test3.txt
hg commit -m "test3" --addremove
rem now let's get rid of change in revision 1 with merge
hg merge --tool internal:local -r 1
hg commit -m "merged"
dir
вывод выполнения:
[C:\Temp] :test
adding test1.txt
adding test2.txt
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
adding test3.txt
created new head
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Volume in drive C is unlabeled Serial number is 0e17:6aba
Directory of C:\Temp\repo\*
16.11.2010 20:05 .
16.11.2010 20:05 ..
16.11.2010 20:05 .hg
16.11.2010 20:05 13 test1.txt
16.11.2010 20:05 13 test2.txt
16.11.2010 20:05 13 test3.txt
39 bytes in 3 files and 3 dirs 12 288 bytes allocated
66 600 316 928 bytes free
Здесь внесены изменения в2-я ревизия (та, которая имеет номер ревизии 1) теперь присутствует в объединенной ревизии.Это не то, что я хотел.