5 ответов:
Да, вы можете сделать это с помощью mercurial без каких-либо расширений по Объединение Наборов Изменений.
поочередно, если вы хотите использовать расширение, которое вы могли бы использовать:
- The Крах Расширение
- The Rebase Extension или
- The Расширение Histedit
мой фаворит -. И затем я совершаю все изменения в одном коммите.
это самый быстрый и удобный способ для меня, потому что я люблю делать много небольших коммитов во время моей повседневной работы;)
Примечание 1:
stripтребуется встроенное расширениеmqдолжен быть включен.
Примечание 2: Мой любимый клиент Git/ Mercurial (SmartGit/ Hg) добавляется по умолчанию во времяstrip. И что еще более удобно: он предоставляет опцию под названиемjoin commits:]
The Rebase extension работал как шарм. To squash 2 commits:
$ hg rebase --dest .~2 --base . --collapseточка-это ярлык для текущей версии.
это еще проще, когда у вас есть несколько коммитов на ветке и вы хотите свернуть их все в один:
$ hg rebase --dest {destination branch (e.g. master)} --base . --collapseКак это работает:
(от http://mercurial-scm.org/wiki/RebaseExtension#Collapsing)
если Вы читаете этот ответ, вы можете забыть все остальные варианты упомянутый в этом ответе и используйте С развиваться расширение.
evolveявляется продолжением mercurial, который помогает нам иметь безопасную изменчивую историю, но все же экспериментально. Вы можете использовать его, клонируя его из своего РЕПО и добавить его в свой .hgrc вот так.[extensions] evolve = ~/evolve/hgext/evolve.pyпредполагая, что вы клонировали evolve РЕПО в вашем домашнем каталоге. Теперь вы можете идти. Вы также можете обратиться за помощью к
hg help fold.ты
foldчтобы раздавить / сложить линейную цепь коммитов, которая не сломана. Что делает fold, он создает новый набор изменений, который содержит изменения из всех наборов изменений и помечает все эти фиксации как устаревшие. Вы можете иметь более глубокий взгляд на это docs.теперь предположим, что вы есть следующая история.
a -> b -> c -> d -> e -> f -> gнужно запретить
e,fиg. Вы можете сделатьhg up g hg fold -r eрезультат будет
a -> b -> c -> d -> hздесь
h- это набор изменений, который содержит изменения всех трех коммитовe,fиg.вы также можете сложить наборы изменений из середины истории, т. е. не обязательно вам нужно выбрать цепочку, которая включает в себя наконечник. Предположим, вы хотите сложить
b,cиd. Вы можете сделатьhg up d hg fold -r b hg evolve --allв результате
a -> i -> jздесь
iэто сложенный набор измененийb,c,dиjэто тот же набор изменений, что иh. Evolve руководство пользователя это надо читать.
я думаю
chistedit(встроенный с Mercurial 2.3) является самым близким кrebase -iэто чистый ртутный (chistedit- это интерактивная версияhistedit). Однажды в histedit thefoldкомандные карты для перебазированияsquashиrollкомандные карты для перебазированияfixup. Смотрите histedit Docs для получения дополнительной информации.вот простой пример. Предположим, у вас есть следующее И вы хотите переместить все изменения 1e21c4b1 в предыдущую редакцию и просто сохранить предыдущую сообщение редакции.
@ 1e21c4b1 drees tip | A commit you want to squash o b4a738a4 drees | A commit o 788aa028 drees | Older stuffвы можете запустить
hg chistedit -r b4a738a4для редактирования истории обратно в b4a738a4. В chistedit вы затем курсор вниз к 1e21c4b1 и нажмитеrчтобы указать, что вы хотите, чтобы свернуть эту ревизию. Обратите внимание, что порядок в histedit (от самого старого до самого нового) отменяется отhg log(от новых к старым).#0 pick 160:b4a738a49916 A commit #1 ^roll 161:1e21c4b1500cпосле выбора изменений вы выбираете
cк их совершению. В результате получается следующее:@ bfa4a3be drees tip | Фиксации о 788aa028 drees / Старые вещи
если вы относительно новичок в них, то
histeditможет быть лучшим выбором, чемchisteditпотому что он предоставляет описания команд в файле histedit для справки. Это просто занимает немного больше редактирования, чтобы установить команды с помощью обычного редактирования текста (так же, как обычный rebase).обратите внимание, чтобы использовать
histeditилиchisteditвы должны добавитьhisteditдля ваших расширений в вашем~/.hgrc:[extensions] histedit =я предложил
chisteditтак как это ближе всего кrebase -iи работает в любом месте в истории. Если вы действительно просто хотите включить / настроить текущую ревизию в предыдущую, то @G. Demeckistripпредложение может быть хорошим, так как то, что происходит, ясно. Он построен в Начиная с Mercuria 2.8. Чтобы получить эквивалентные результаты, как указано выше, вы можете сделать следующее:hg strip . hg add hg commit --amendПримечание
strip, как и histedit, должен быть включен в вашем~/.hgrc:[extensions] strip =

Comments