Понедельник, 30 Июнь 2008

Mercurial: поменять commits местами

Захотелось мне поменять два commit’а местами. Так получилось что я в серию мелких опечаток вставил изменение функциональности, что несколько мешала отладке.

На входе имеем:

@  changeset:   3:59a8c74ba900
|  tag:         tip
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:48 2008 +0400
|  summary:     Add to b
|
o  changeset:   2:46291e722ba1
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:35 2008 +0400
|  summary:     Add to c
|
o  changeset:   1:19138e5a67f8
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:26 2008 +0400
|  summary:     Add to a
|
o  changeset:   0:c96f648e1ada
   user:        Kirill A. Korinskiy <catap@catap.ru>
   date:        Mon Jun 30 18:58:00 2008 +0400
   summary:     Init repo

Первое что нам надо сделать это скинуть верх дерева в очередь патчей:

hg qimport -r 3:tip
hg qpop -a

Теперь наш репозиторий выглядит так (мы перенесли последовательность commit’ов от 3 до tip’а в серию патчей):

@  changeset:   2:46291e722ba1
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:35 2008 +0400
|  summary:     Add to c
|
o  changeset:   1:19138e5a67f8
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:26 2008 +0400
|  summary:     Add to a
|
o  changeset:   0:c96f648e1ada
   user:        Kirill A. Korinskiy <catap@catap.ru>
   date:        Mon Jun 30 18:58:00 2008 +0400
   summary:     Init repo

Теперь надо сделать up до места куда будем вставлять нашу верхушку:

hg up -C 1

И собственно вставить ее

hg qpush -a
hg qdelete -r qbase:qtip

Получаем:

@  changeset:   3:34f6257703c7
|  tag:         tip
|  parent:      1:19138e5a67f8
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:48 2008 +0400
|  summary:     Add to b
|
| o  changeset:   2:46291e722ba1
|/   user:        Kirill A. Korinskiy <catap@catap.ru>
|    date:        Mon Jun 30 18:58:35 2008 +0400
|    summary:     Add to c
|
o  changeset:   1:19138e5a67f8
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:26 2008 +0400
|  summary:     Add to a
|
o  changeset:   0:c96f648e1ada
   user:        Kirill A. Korinskiy <catap@catap.ru>
   date:        Mon Jun 30 18:58:00 2008 +0400
   summary:     Init repo

Далее прыгаем до 2 ревизии (начала середины которую хотим перенести наверх):

hg up -C 2

Переносим новую голову в серию патчей:

hg qimport -r 2:2
hg qpop -a

Теперь поднимаемся до tip’а и вставляем серию патчей:

hg up -C tip
hg push -a
hg qdelete -r qbase:qtip

И получаем:

@  changeset:   3:738b73e4902f
|  tag:         tip
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:35 2008 +0400
|  summary:     Add to c
|
o  changeset:   2:34f6257703c7
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:48 2008 +0400
|  summary:     Add to b
|
o  changeset:   1:19138e5a67f8
|  user:        Kirill A. Korinskiy <catap@catap.ru>
|  date:        Mon Jun 30 18:58:26 2008 +0400
|  summary:     Add to a
|
o  changeset:   0:c96f648e1ada
   user:        Kirill A. Korinskiy <catap@catap.ru>
   date:        Mon Jun 30 18:58:00 2008 +0400
   summary:     Init repo

Написано в: 19:09 | 6 комментариев | | теги: , , | постоянная ссылка |
Добавить пост в:   Delicious Reddit Slashdot Digg Technorati Google


Последние комментарии

Комментарии

asd 1.07.2008 12:41

Кирилл, продублируй это в hg-tricks, плз.

ответить
Kirill A. Korinskiy 1.07.2008 13:28

Продублировал. Но ты думаешь кто-то этим будет пользоваться, реально?

ответить

Форма комментирования для «Mercurial: поменять commits местами»

Обязательное поле. Не больше 30 символов.

Обязательное поле

asd 1.07.2008 13:30

В принципе, может быть, я. ;)

ответить
Kirill A. Korinskiy 1.07.2008 13:34

Надо учитывать что это все круто пока не было push’а. Просто после него появится много-много heads и их придется рубить через merge.

Реально использование я вижу пока одно: когда ты делаешь push на удаленный репозиторий для тестов (который ты всегда можешь грохнуть и с него никто не кормится), что бы проще было up’иться во время этих тестов.

Как разносить коммиты по бранчам рассказывать, раз пошло такое дело?

ответить
serge 14.02.2009 1:56

Можно легче:

hg qimport -r 2:tip
hg qpop -a
# правим последовательность применения патчей в `hg root`/.hg/patches/series
hg qpush -a
hg qdelete -r qbase:qtip
ответить
Kirill A. Korinskiy 14.02.2009 13:53

А если мы хотим перенести эти патчи в другую ветку?

Мой способ на это намекает ;)

ответить