Можно ли сквош фиксирует в Mercurial?



У меня есть пара коммитов, которые действительно должны быть только один. Если бы я использовал git, я бы использовал:



git rebase -i <some-commit-before>


а потом раздавить их.



могу ли я сделать это в mercurial? Если да, то как?

583   5  

5 ответов:

Да, вы можете сделать это с помощью mercurial без каких-либо расширений по Объединение Наборов Изменений.

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

мой фаворит -. И затем я совершаю все изменения в одном коммите.

это самый быстрый и удобный способ для меня, потому что я люблю делать много небольших коммитов во время моей повседневной работы;)


Примечание 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

Как это работает:

enter image description here

(от 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 the fold командные карты для перебазирования 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. Demecki strip предложение может быть хорошим, так как то, что происходит, ясно. Он построен в Начиная с Mercuria 2.8. Чтобы получить эквивалентные результаты, как указано выше, вы можете сделать следующее:

hg strip .
hg add
hg commit --amend

Примечание strip, как и histedit, должен быть включен в вашем~/.hgrc:

[extensions]
strip =

Comments

    Ничего не найдено.