Ответ 1
Дизайн Mercurial просто не включает концепцию промежуточной области. То есть промежуточное состояние между локальной модификацией и фиксацией отсутствует.
Вот обзор каждой из концепций, которые вы упомянули:
hg graft
является эквивалентом git cherry-pick
. Он копирует фиксацию из одной ветки в другую. Типичным примером использования этой функции является копирование исправления ошибок из одной ветки релиза в другую. Эта команда заменяет более старое (и теперь устаревшее) расширение hg transplant
.
hg record
и hg qrecord
похожи на git add --patch
. Они позволяют вам интерактивно выбирать куски для фиксации. Поэтому, если вы изменили несколько разных областей одного файла, вы можете выбрать, какие области (например, ханки) вы действительно хотите совершить, и которые вы хотите оставить в качестве локальных изменений.
qrecord
доступен только в том случае, если включен mq
. Он фиксирует патч mq
вместо стандартного коммита.
hg shelve
похож на git stash
. Он позволяет временно отложить локальные изменения в ваших файлах (или кусках файла). Эти модификации могут быть unshelved
, когда вы готовы к ним.
dirstate
является внутренним классом исходного кода Mercurial. Он не отображается пользователю.
Mercurial Queues
(также известно как mq
), вероятно, ближе всего вы попадете в промежуточную область в Mercurial. Вот описание из Mercurial wiki:
Изменения сохраняются как патчи, которые передаются в Mercurial. Записи могут быть удалены или переупорядочены, а базовый патч может быть обновляется на основе изменений, внесенных в рабочий каталог. Патч каталог также может быть помещен под контроль версий, так что вы можете отдельная история изменений, внесенных в ваши патчи.
mq
часто используется для полировки/доработки, которые вы тестируете локально, но не попали в общедоступное место. Некоторые люди также используют его для поддержки ряда модификаций стороннего кода.