Задать вопрос
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++

Как объединить два и более коммитов в один?

Мне хочется найти самый простой способ для решения сабжа?

Хотелось бы упростить свою работу с Mercurial, а пока она выглядит так:
1) hg clone <repositary-url> my-work
2) Копирую my-work в my-work-public
3) произвожу все магические действия с кодом в папке my-work
4) Затем начинаю отсматривать комиты от первого после клонирования к последнему. Попутно когда делаю hg up <ревизия> я мержу папки my-work и my-work-public с помощью WinMerge
5) Затем делаю hg push из my-work-public

подробнее:
Когда я веду работу с кодом, то какие-то комиты ломают сборку, но они мне нужны чтобы не запутаться что же я делал вообще. Но перед отправкой в репозитарий нужно создать набор комитов, которые не ломают сборку, для этого я использую WinMerge. Откатываясь на нужную мне ревизию в my-work, я могу затем смержить папку и сделать очередной hg ci -m "" в my-work-public, но уже не ломающий.

Мне кажется этот процесс можно упростить, но читая доку «Глава 12. Управление изменениями с Mercurial Queues» думаю что это все-таки будет тоже излишне громоздко. Есть ли способ еще проще чем MQ?

P.S.:
Возможно сумбурно написал, хоть и старался по-лучше, если что спрашивайте уточняющие :)
  • Вопрос задан
  • 6516 просмотров
Подписаться 4 Оценить 2 комментария
Решения вопроса 1
@gribozavr
mercurial.selenic.com/wiki/MqExtension

Можете коммитить как обычно, затем преобразовать всё в патчи, объединить/разрезать как нравится, преобразовать обратно в коммиты и запушить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@chersanya
Несмотря на то, что прошло достаточно много времени, всё-таки напишу несколько строк о более удобном решении, чем MQ (по мнению, в том числе, самих разработчиков mercurial).

А именно, расширение histedit (которое уже давно поставляется вместе с Mercurial, а значит тестируется так же и имеет согласованный интерфейс). Оно представляет удобный способ свёртки, изменения, редактирования, удаления, перемещения коммитов в истории, причём всё достаточно интуитивно для пользователя.

Так же есть менее известное и пока не распространяемое вместе с Mercurial, (не из-за отсутствия стабильности, а в основном из-за некоторой несогласованности интерфейса, опций, поведения) расширение evolve (так же changeset evolution, mercurial.selenic.com/wiki/ChangesetEvolution), которое пишет один из разработчиков. Оно во-первых изменяет поведение стандартных команд, которые редактируют историю, давая некоторые приятные фишки: а) возможность получить любую версию удалённого или изменённого коммита (да, это версионность самих версий файлов), и б) можно менять опубликованную историю, причём она коррекно изменится у всех людей склонировавших репозиторий (есть небольшие оговорки). Также это расширение добавляет некоторые дополнительные команды, например для свёртки нескольких коммитов — hg fold.

Оба этих расширения используются самой командой разработки Mercurial в официальных репозиториях.
Ответ написан
pomeo
@pomeo
Не знаю правильно ли я понял, на примере гита у него есть такая штука git commit -p, которая позволяет пройтись по всем изменениям за раз и какие-то принять, какие-то нет. Прямого аналога в mercurial нет, но есть похожее mercurial.selenic.com/wiki/RecordExtension
Ответ написан
pchelkin
@pchelkin
быдлокодер
Вам надо работать с бранчами. Делаете какую-то фичу — создаете отдельную ветку.
А зачем вы делаете пункт 2?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы