Мой вопрос:
- Если в моем репозитории Mercurial есть две головы (ветки с изменениями), и я хотел бы избавиться от одного из них, но отбросить все изменения из этой ветки вместо их слияния в другую, и я могу 't вычеркнуть эти изменения, поэтому мне нужно объединить, как я могу сделать это с клиентом командной строки?
Если у меня две главы в моем репозитории 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 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
Здесь изменения, внесенные во второй набор изменений (тот, который имеет номер версии 1), теперь присутствуют в объединенном наборе изменений. Этого я не хотел. Забастовкa >