У вас есть несколько вариантов:
Положите предметы на полку. Это сохраняет изменения и удаляет их из рабочего каталога, чтобы ветвление могло продолжаться. Это не создает набор изменений.
hg shelve --all --name "UnfinishedChanges"
hg unshelve --name "UnfinishedChanges"
Обновление / редактирование : в более новых версиях Mercurial может потребоваться использование
hg shelve -n "UnfinishedChanges"
hg unshelve "UnfinishedChanges"
Вы все еще можете использовать его --name
в качестве альтернативы -n
, но, похоже, ртуть больше не нравится --name
. Кроме того, --all
больше не требуется, и Mercurial действительно будет волноваться по этому поводу.
Заплатите очередь элементов, используя mq
. В некоторых отношениях он не слишком отличается от полки, но ведет себя иначе. Конечный результат тот же, изменения удаляются и могут быть дополнительно применены позже. При нажатии патчи являются логическими наборами изменений, при открытии они сохраняются в другом месте и не являются частью истории наборов изменений.
hg qnew "UnfinishedWork"
hg qrefresh
hg qpop
hg qpush "UnfinishedWork"
Зафиксируйте их локально, обновите до предыдущего набора изменений и продолжайте работу, используя анонимные ветки (или несколько головок). Если вы хотите внести изменения, вы можете объединить головы. Если вы не хотите изменений, вы можете удалить набор изменений.
hg commit -m"Commiting unfinished work in-line."
hg update -r<previous revision>
hg strip -r<revision of temporary commit>
Зафиксируйте их в названной ветке. Затем рабочий процесс становится таким же, как для варианта 3 - объединить или разделить, когда вы будете готовы.
hg branch "NewBranch"
hg commit -m"Commiting unfinished work to temporary named branch."
hg update <previous branch name>
Лично я использую вариант 3 или 4, так как я не против удаления наборов изменений или частичного кода проверки (если это в конечном итоге не будет продвинуто). Это можно использовать в сочетании с новым материалом Phase, чтобы при необходимости скрыть ваши локальные наборы изменений от других пользователей.
Я также использую эту rebase
команду для перемещения наборов изменений, чтобы избежать слияний, когда слияние ничего не добавит в историю кода. Слияния, которые я обычно сохраняю для активности между важными ветвями (например, веток выпуска) или активности из более долгоживущей ветки функций. Также есть histedit
команда, которую я использую для сжатия наборов изменений, где их «болтливость» снижает ценность.
Очереди исправлений также являются распространенным механизмом для этого, но они имеют семантику стека. Вы нажимаете и выталкиваете патчи, но патч, который находится «под» другим патчем в стеке, требует, чтобы и патч, находящийся наверху, также был вставлен.
Предупреждение , как и в случае со всеми этими параметрами, если в файлах есть больше изменений с момента временных изменений, которые вы отложили / поставили в очередь / разветвили, при снятии с полки / нажатии / слиянии потребуется разрешение слияния.